爆発画面の描画

(サンプル一覧を表示する)

FlashDevelop を使って、爆発画面を描画するテストをしてみました。

ソースファイルは 3 つに分かれていますが、
その内、爆発の描画部分だけを下に表示しています。
Flash の実行画面
爆発画面の描画

Flashプレーヤーが入っていないか、JavaScriptが無効になっているようです。

Get Adobe Flash player

爆発画面の描画
マウスのボタンが押されている間、爆発画面を描画します。

ソースコード

package
{
	import flash.display.BitmapData;
	
	/**
	 * 爆発画面描画
	 */
	public class Explosion
	{
		/**
		 * パーティクルクラスの配列
		 */
		private var particles:Array;
		
		/**
		 * 描画し終えたフレーム数
		 */
		private var frames:int;
		
		/**
		 * コンストラクタ
		 * @param	x	中心の X 座標
		 * @param	y	中心の Y 座標
		 */
		public function Explosion(x: Number, y: Number)
		{
			// 変数の初期化
			particles = new Array();
			frames = 0;
			
			// 30 個分作成
			for (var i:int = 0; i < 30; i++)
			{
				var particle:Particle;
				var a: Number;
				var s: Number;
				var l: Number;
				
				a = Math.random() * Math.PI * 2;
				s = Math.random() * 10;
				
				particle = new Particle
				(
					// 初期座標
					x,
					y,
					// 移動速度
					Math.cos(a) * s,
					Math.sin(a) * s,
					// 色の濃さ
					1
				);
				
				particles.push(particle);
			}
		}
		
		/**
		 * 爆発画面を描画
		 * @param	buffer	描画先の BitmapData
		 * @return	今までに描画したフレーム数
		 */
		public function render(buffer:BitmapData):int
		{
			for each (var particle:Particle in particles)
			{
				// ピクセルの色の決定
				// 16 ビット分左にシフトすることで赤色を作る
				var color:int;
				color = int((particle.energy * 0xff) << 16);
				
				// ピクセルのセット
				buffer.setPixel(
					particle.x, 
					particle.y, 
					color);
				
				// 座標の更新
				particle.x += particle.sx;
				particle.y += particle.sy;
				
				// 爆発速度の減衰
				particle.sx *= 0.98;
				particle.sy *= 0.98;
				
				// 色の減衰
				particle.energy *= 0.98;
			}
			
			frames++;
			return frames;
		}
	}
}
		

このサンプルでは、何も描画していない時にも負荷がかかるように
なってしまっているので、Main.as の onEnterFrame() を、
何も描画するものがない場合はそのまま終了するようなコードに
書き換えてみてください。

参照

外部リンク