logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!

Efeito fumaça usando sistema de partícula TweensyFX

Colocado por Bindable na(s) categoria(s): Abode flex, Flex em 07 7th, 2009 | Sem comentários

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>



Veja o post original no blog do autor aqui!  

Bindable

Escrito por Bindable @ http://www.bindable.com.br/blog
Saiba mais sobre o autor na sua pagina de perfil
Outros posts do autor:
» Arredondando os cantos de uma imagem usando máscara
» Flex Explorer’s
» Formatar/Alinhar codigo FLEX

Deixe um comentário



Spam Protection by WP-SpamFree

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2795 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com