Para quem não conhece TweensyFX é uma library de expansão do projeto Tweensy
que fornece varios recursos de efeitos otimizados, entre eles estão directional motion blur, pixelation, xray, bulge/dent displacements, reflection, emitters, rgb channel splitting e bump mapping. Criei um exemplo bem simples de um efeito de fumaça, espero que ajude os interessados.
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> <mx:Script> <![CDATA[ import com.flashdynamix.motion.effects.core.ColorEffect; import com.flashdynamix.motion.effects.core.FilterEffect; import com.flashdynamix.motion.effects.PerlinDisplacementEffect; import com.flashdynamix.motion.layers.BitmapLayer; import com.flashdynamix.motion.extras.Emitter; private var layer:BitmapLayer; private var disp:PerlinDisplacementEffect; private var tx:Number; private var ty:Number; private var smokeEmittor:Emitter; private var smokeStartCt:ColorTransform; private var smokeEndCt:ColorTransform; [Embed(source="smokeFX.png")] private var _fireParticle:Class; public function init():void { myButton.addEventListener(MouseEvent.CLICK, startSmoke); layer = new BitmapLayer(550, 400, 2); disp = new PerlinDisplacementEffect(275, 200, 2, -6, 1); disp.baseX = 50; disp.baseY = 40; layer.add(disp); layer.add(new FilterEffect(new BlurFilter(3, 3, 1))); layer.add(new ColorEffect(new ColorTransform(1, 1, 1, 0.95))); smokeStartCt = new ColorTransform(255, 255, 255, 0, 255, 255, 255, 0); smokeEndCt = new ColorTransform(0, 0, 0, .0, 255, 255, 255, 7.72); smokeEmittor = new Emitter(_fireParticle, {scaleX: 2.5, scaleY: 2.5, rotation: "-180,180"}, 1, 1, "255, 285", "100, 200", 1); smokeEmittor.transform.colorTransform = smokeStartCt; smokeEmittor.endColor = smokeEndCt; smokeEmittor.scale = 0.1; layer.draw(smokeEmittor.holder); tx = 250; ty = 350; myUIComponent.visible = false; myUIComponent.addChild(layer); addEvent(myUIComponent, Event.ENTER_FRAME, draw); addEvent(myUIComponent, MouseEvent.MOUSE_MOVE, mover); } private function mover(e:MouseEvent):void { tx = myUIComponent.mouseX; ty = myUIComponent.mouseY; } private function draw(e:Event):void { smokeEmittor.transform.colorTransform = new ColorTransform(ca.value, cb.value, cc.value, cc0.value, da.value, db.value, dc.value, dc0.value); smokeEmittor.endColor = new ColorTransform(aa.value, ab.value, ac.value, ac0.value, ba.value, bb.value, bc.value, bc0.value); smokeEmittor.x = myUIComponent.width / 2; smokeEmittor.y = myUIComponent.height; } protected function addEvent(item:EventDispatcher, type:String, liststener:Function, priority:int = 0, useWeakReference:Boolean = true):void { item.addEventListener(type, liststener, false, priority, useWeakReference); } private function startSmoke(e:MouseEvent):void { myUIComponent.visible = true; layer.startRender(); myButton.removeEventListener(MouseEvent.CLICK, startSmoke); myButton.addEventListener(MouseEvent.CLICK, endSmoke); } private function endSmoke(e:MouseEvent):void { myUIComponent.visible = false; layer.stopRender(); myButton.removeEventListener(MouseEvent.CLICK, endSmoke); myButton.addEventListener(MouseEvent.CLICK, startSmoke); } ]]> </mx:Script> <mx:UIComponent id="myUIComponent" height="400" width="600" x="19" y="33"/> <mx:Button id="myButton" label="Inicia" x="19" y="10"/> <mx:HSlider id="aa" maximum="255" minimum="0" value="255" width="78" x="19" y="40"/> <mx:HSlider id="ab" maximum="255" minimum="0" value="255" width="78" x="105" y="40"/> <mx:HSlider id="ac" maximum="255" minimum="0" value="255" width="78" x="191" y="40"/> <mx:HSlider id="ba" maximum="255" minimum="0" value="255" width="78" x="19" y="60"/> <mx:HSlider id="bb" maximum="255" minimum="0" value="255" width="78" x="105" y="60"/> <mx:HSlider id="bc" maximum="255" minimum="0" value="255" width="78" x="191" y="60"/> <mx:HSlider id="bc0" maximum="255" minimum="0" value="255" width="78" x="277" y="66"/> <mx:HSlider id="ca" maximum="255" minimum="0" value="255" width="78" x="19" y="86"/> <mx:HSlider id="cb" maximum="255" minimum="0" value="255" width="78" x="105" y="86"/> <mx:HSlider id="cc" maximum="255" minimum="0" value="255" width="78" x="191" y="86"/> <mx:HSlider id="da" maximum="255" minimum="0" value="255" width="78" x="19" y="112"/> <mx:HSlider id="db" maximum="255" minimum="0" value="255" width="78" x="105" y="112"/> <mx:HSlider id="dc" maximum="255" minimum="0" value="255" width="78" x="191" y="112"/> <mx:HSlider id="ac0" maximum="255" minimum="0" value="255" width="78" x="277" y="40"/> <mx:HSlider id="cc0" maximum="255" minimum="0" value="255" width="78" x="277" y="86"/> <mx:HSlider id="dc0" maximum="255" minimum="0" value="255" width="78" x="277" y="112"/> </mx:Application>




