ActionScript Learning 110708

7.8.2011

Stardustでパーティクルを表現する。

Flashのパーティクルエンジン、Stardustでパーティクルを制作する。2D、3Dのパーティクルが生成できるようだが、まずは2Dから検証する。

単純なパーティクルを発生させてみる。 パーティクルの図形はsketchbookを使用した。
なおライブラリをインポートする際はStardustのライブラリだけではなく、cjsignalsというライブラリも必要なようだ。

SHOW DEMO VIEW CODE

package {
	
	
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;
	
	import idv.cjcat.stardust.common.actions.*;
	import idv.cjcat.stardust.common.clocks.*;
	import idv.cjcat.stardust.common.handlers.*;
	import idv.cjcat.stardust.common.initializers.*;
	import idv.cjcat.stardust.common.math.*;
	import idv.cjcat.stardust.twoD.actions.*;
	import idv.cjcat.stardust.twoD.emitters.*;
	import idv.cjcat.stardust.twoD.initializers.*;
	import idv.cjcat.stardust.twoD.zones.*;
	import idv.cjcat.stardust.twoD.handlers.*;

	
	
	public class NMain extends MovieClip {
		
		//-------------------------------------------------------------------------------- Properties

		private var _this:*;
		private var _stage:Stage;


		
		//-------------------------------------------------------------------------------- Constractor
		
		public function NMain() {
			
			_this = this;
			
			_stage = stage;
			
			_stage.scaleMode = StageScaleMode.NO_SCALE;
			_stage.align = StageAlign.TOP_LEFT;
			
			//_stage.quality = "low";
			
			Init();
		}
		
		
		//-------------------------------------------------------------------------------- Function

		/**
		 * initialize
		 */
		public function Init():void {
			
			setup();
		}
		
		/**
		 * setup
		 */
		private function setup():void {
			
			setup_main();
			
			setup_particle();
			
			_this.addEventListener(Event.ENTER_FRAME, _enterframe);
		}
		/** */
		private function _enterframe(eo:* = null):void {
			
			_emitter.step();
		}
		
		/**
		 * main
		 */
		private var _main:MovieClip;
		
		private function setup_main():void {
			
			_main = new MovieClip();
			
			_this.addChild(_main);
			
			_stage.addEventListener(Event.RESIZE, main_resize);
			main_resize();
		}
		//
		private function main_resize(eo:* = null):void {
			
			_main.x = Math.round(_stage.stageWidth / 2);
			_main.y = Math.round(_stage.stageHeight / 2);
		}
		
		
		/**
		 * particle
		 */
		private var _emitter:*;
		
		private function setup_particle():void {
			
			_emitter = new Emitter2D();
			
			_emitter.clock = new SteadyClock(1);
			
			_emitter.particleHandler = new DisplayObjectHandler(_main);
			
			
			_emitter.addInitializer(new DisplayObjectClass(graph));
			_emitter.addInitializer(new Position(new SinglePoint(0, 0)));
			_emitter.addInitializer(new Velocity(new LazySectorZone(20, 1)));
			_emitter.addInitializer(new Life(new UniformRandom(50, 10)));
			_emitter.addInitializer(new Rotation(new UniformRandom(0, 180)));
			
			
			_emitter.addAction(new Age());
			_emitter.addAction(new DeathLife());
			_emitter.addAction(new Move());
			_emitter.addAction(new Damping(0.1));
			_emitter.addAction(new ScaleCurve(0, 20));
			
			
		}


		
	}
}


/**
 * graph
 */
import flash.display.*;
import sketchbook.graphics.GraphicsHelper;
import frocessing.color.*;

class graph extends MovieClip {
	
	public function graph() {
		
		var colorhsl = new ColorHSL();
		colorhsl.s = .8;
		colorhsl.h = 360 * Math.random();
		colorhsl.l = .8;
		var col = colorhsl.value;

		var gh:GraphicsHelper = new GraphicsHelper(graphics);
		gh.beginFill(col);
		
		
		var rndnum = Math.round(Math.random() * 4);
		
		if(rndnum == 0) {
			
			gh.drawArc(0, 0, 40, Math.random() * 360, -90);
		}
		else if(rndnum == 1) {
			
			gh.drawPie(0, 0, 40, Math.random() * 360, -90);
		}
		else if(rndnum == 2) {
			
			gh.drawRing(0, 0, 40, 25, Math.random() * 360, -90);
		}
		else if(rndnum == 3) {
			
			gh.drawStar(0, 0, 40, 20, Math.floor(Math.random() * 5 + 5));
		}
		else if(rndnum == 4) {
			
			gh.drawRect(-20, -20, 40, 40);
		}

		gh.endFill();
	}
		
}






category : ActionScript / Flash / Frocessing / Stardust / sketchbook

Demonstrations

Feature Samples

Author

虹村 マキオウ (nizimura makiou)

猫と太極拳を愛する横浜在住のフリーランスクリエイターです。

logo

Demo and Sample

Category