Home > ActionScript > パーティクルを使った噴水 #AS3

パーティクルを使った噴水 #AS3

  • 2010-09-04 (土) 3:42
  • ActionScript

 ActionScriptで、パーティクルを使った噴水のフラッシュを作成してみました。
 少し重いです。
 
 
 
 
 
 
 

20100110

Alternative content

Get Adobe Flash player


package practice
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
	import flash.geom.Rectangle;
	import flash.utils.Timer;

	[SWF(width = "430", height = "430", backgroundColor = "0x000000", fps = "60")]
	public class Practice96 extends Sprite{
		private var bitmap:BitmapData;
		private var col:Array = new Array();
		private var px:Array = new Array();
		private var p:Array = new Array();
		private var num:int = 200;
		private var maxX:Number;
		private var maxY:Number;
		private var zz:int;
		private var timer:Timer;

		public function Practice96() {
			for (var i:int=0;i<256;i++)
			col[i] = (Math.min(255, 10 * (i / 8)) << 16) +
					(Math.min(255, 10 * (i / 4)) << 8) + Math.min(255, 10 * i );
			bitmap = new BitmapData(430, 430, false, 0x000000);
			addChild(new Bitmap(bitmap));
			addEventListener(Event.ENTER_FRAME, update);
			setupParam();
			for (i = 0; i < num; i++) p.push(initParticle(new Particle()));
			timer = new Timer(5000);
			timer.addEventListener(TimerEvent.TIMER, function(e:TimerEvent):void { setupParam(); } );
			timer.start();
		}

		private function setupParam():void {
			maxX= Math.random() * 5 + 0.5;
			maxY = Math.random() * 6 + 3;
		}

		private function initParticle(p:Particle):Particle {
			p.vx = Math.random() * maxX - maxX / 2;
			p.vy = -Math.random() * maxY - maxY / 2;
			p.x = bitmap.width/2;
			p.y = bitmap.height;
			return p;
		}

		private function update(e:Event):void {
			var w:Number = bitmap.width;
			var h:Number = bitmap.height;
			bitmap.fillRect(bitmap.rect, 0x000000);
			var h2:int = w * (h - 2);
			for (var i:int = 0; i < h; i++) px[h2 + i] = 0;
			for (i = 0; i < 200; i++) px[h2 + Math.floor(Math.random() * w)] = 255;
			for (i = 0; i < p.length; i++) {
				if(p[i].y>h+5)initParticle(p[i]);
				p[i].x += p[i].vx;
				p[i].y += p[i].vy;
				p[i].vy += 0.2;
				var d:int = w * Math.floor(p[i].y) + Math.floor(p[i].x);
				if (p[i].x > 1 && p[i].x < w - 2 && p[i].y > 1 && p[i].y < h - 1){
					px[d] = px[d + 1] = px[d + 1 + w] = px[d + w] = Math.floor(Math.random()*100) % 22 + 200;
				}
			}
			for (var yy:int = 1; yy < h - 2; yy++) {
				var py:int = w * yy;
				for (var xx:int = 1; xx < w - 1; xx++) {
					var pt:int = py + xx;
					px[pt] = (px[pt - w] + px[pt + w]
						+px[pt + 1] + px[pt - 1]) >&gt 2;
					bitmap.setPixel(xx, yy, col[px[pt - w]]);
				}
			}
		}
	}
}

class Particle {
	public var x:Number = 0;
	public var y:Number = 0;
	public var vx:Number = 0;
	public var vy:Number = 0;
	public var col:uint;
}

Related posts:

  1. カラフルなアニメーション
  2. 煙・Smoke
  3. flash on 2010-5-15
  4. flash on 2010-5-24
  5. メタボール

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://termat.sakura.ne.jp/actionscript/4707/trackback/?_wpnonce=8bd1b720cd
Listed below are links to weblogs that reference
パーティクルを使った噴水 #AS3 from TM's Workspace

Home > ActionScript > パーティクルを使った噴水 #AS3

Google Analyticator

119
Unique
Visitors
Powered By Google Analytics

Return to page top