Beautifl - Flash Gallery

Thumbnail : [QuickBox2D] + [Stardust]
[QuickBox2D] + [Stardust]
paq 2010-01-22 MIT License

再生するにはFlash Playerが必要です。デスクトップのブラウザでご覧ください。

package 
{
	import com.actionsnippet.qbox.QuickBox2D;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import idv.cjcat.stardust.common.clocks.SteadyClock;
	
	/**
	 * ...
	 * @author paq89
	 */
	[SWF(width = 465, height = 465, backgroundColor = 0xFFFFFF, frameRate = 60)]
	public class Main extends Sprite 
	{
		private var _emitter:QuickBox2DEmitter;
		private var _qbox:QuickBox2D;
		private var _container:MovieClip;
		
		/*
		 * コンストラクタ
		**/
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			
			stage.scaleMode = StageScaleMode.NO_SCALE;
			
			// Box2Dを表示するムービークリップを作成
			_container = new MovieClip();
			addChild(_container);
			
			// Box2Dを初期化
			_qbox = new QuickBox2D(_container);
			_qbox.createStageWalls();
			_qbox.gravity.y = 98;
			_qbox.start();
			
			// エミッターを作成
			_emitter = new QuickBox2DEmitter(new SteadyClock(0.1), _qbox);
			var renderer:QuickBox2DRenderer = new QuickBox2DRenderer();
			renderer.addEmitter(_emitter);
			
			// イベントリスナー
			addEventListener(Event.ENTER_FRAME, loop);
		}
		
		private function loop(e:Event):void 
		{
			// エミッター更新
			_emitter.step();
		}
		
	}
	
}
import com.actionsnippet.qbox.objects.BoxObject;
import com.actionsnippet.qbox.objects.CircleObject;
import com.actionsnippet.qbox.QuickBox2D;
import com.actionsnippet.qbox.QuickObject;
import flash.display.Sprite;
import idv.cjcat.stardust.common.actions.Age;
import idv.cjcat.stardust.common.actions.AlphaCurve;
import idv.cjcat.stardust.common.actions.DeathLife;
import idv.cjcat.stardust.common.actions.ScaleCurve;
import idv.cjcat.stardust.common.initializers.Initializer;
import idv.cjcat.stardust.common.initializers.Life;
import idv.cjcat.stardust.common.initializers.Scale;
import idv.cjcat.stardust.common.initializers.SwitchInitializer;
import idv.cjcat.stardust.common.math.UniformRandom;
import idv.cjcat.stardust.common.particles.Particle;
import idv.cjcat.stardust.common.utils.construct;
import idv.cjcat.stardust.common.xml.XMLBuilder;
import idv.cjcat.stardust.common.clocks.Clock;
import idv.cjcat.stardust.twoD.emitters.Emitter2D;
import idv.cjcat.stardust.twoD.initializers.Initializer2D;
import idv.cjcat.stardust.twoD.initializers.Position;
import idv.cjcat.stardust.twoD.zones.Line;
import idv.cjcat.stardust.twoD.zones.RectZone;

class QuickBox2DEmitter extends Emitter2D
{
	public function QuickBox2DEmitter(clock:Clock, qbox:QuickBox2D):void 
	{
		super(clock);
		
		var obj1:QuickObjectClass = new QuickObjectClass(CircleObject, [qbox, {} ])
		var obj2:QuickObjectClass = new QuickObjectClass(BoxObject, [qbox, {} ])
		var switchInit:SwitchInitializer = new SwitchInitializer([obj1, obj2], [1, 1]);
		
		addInitializer(switchInit);
		addInitializer(new Life(new UniformRandom(100, 0)));
		addInitializer(new Position(new Line(0, 1, 15, 1)));
		addInitializer(new Scale(new UniformRandom(1, 1)));
		
		addAction(new Age());
		addAction(new DeathLife());
		addAction(new AlphaCurve(5, 20));
		addAction(new ScaleCurve(5, 20));
	}
}

class QuickObjectClass extends Initializer2D 
{
	public var quickObjectClass:Class;
	public var constructorParams:Array;
	
	public function QuickObjectClass(quickObjectClass:Class = null, constructorParams:Array = null)
	{
		this.quickObjectClass = quickObjectClass;
		this.constructorParams = constructorParams;
	}
	
	override public function initialize(p:Particle):void
	{
		if (!quickObjectClass) return;
		p.target = construct(quickObjectClass, constructorParams);
	}
}

import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import idv.cjcat.stardust.common.events.EmitterEvent;
import idv.cjcat.stardust.common.particles.Particle;
import idv.cjcat.stardust.common.particles.ParticleIterator;
import idv.cjcat.stardust.common.renderers.Renderer;
import idv.cjcat.stardust.common.xml.XMLBuilder;
import idv.cjcat.stardust.twoD.display.AddChildMode;
import idv.cjcat.stardust.twoD.particles.Particle2D;

class QuickBox2DRenderer extends Renderer
{
	public var qbox:QuickBox2D;
	
	public function QuickBox2DRenderer(qbox:QuickBox2D = null)
	{
		this.qbox = qbox;
	}
	
	override protected function particlesAdded(e:EmitterEvent):void
	{
		//if (!qbox) return;
		
		var particle:Particle2D;
		var iter:ParticleIterator = e.particles.getIterator();
		while (particle = iter.particle as Particle2D)
		{
			var quickObj:QuickObject = particle.target;
			quickObj.x = particle.x;
			quickObj.y = particle.y;
			quickObj.angle = particle.rotation;
			iter.next();
		}
	}
	
	override protected function particlesRemoved(e:EmitterEvent):void
	{
		var particle:Particle;
		var iter:ParticleIterator = e.particles.getIterator();
		while (particle = iter.particle)
		{
			var quickObj:QuickObject = particle.target;
			quickObj.destroy();
			iter.next();
		}
	}
	
	override protected function render(e:EmitterEvent):void
	{
		var particle:Particle2D;
		var iter:ParticleIterator = e.particles.getIterator();
		while (particle = iter.particle as Particle2D)
		{
			var quickObj:QuickObject = particle.target;
			
			//quickObj.x = particle.x;
			//quickObj.y = particle.y;
			quickObj.userData.alpha = particle.alpha;
			if (quickObj is CircleObject)
			{
				quickObj.shape.m_radius = particle.scale;
				quickObj.userData.scaleX = quickObj.userData.scaleY = particle.scale * 2;
			}
			if (quickObj is BoxObject)
			{
				/*quickObj.shape.m_vertices[0].x = -0.5 * particle.scale;
				quickObj.shape.m_vertices[1].x = 1 * particle.scale;
				quickObj.shape.m_vertices[2].x = 1 * particle.scale;
				quickObj.shape.m_vertices[3].x = -0.5 * particle.scale;*/
			}
			iter.next();
		}
	}
}