. .. : Swf.hu 1.0 archívum : Swf.hu főoldal >>> : .. .


 
 
SEGÉDLETEK Effektus-trükk

Részecskerendszer (particle-system) segédlet
  feltöltve: 2003.12.10 | szerző: Newone | olvasva: 14429 alkalommal

           
 

Végre elérkeztünk az effectekig. Gondolom mindenki áttanulmányozta a mellékelt és sűrűn kommentelt forrásfile-okat, így már nem titok, hogy mit is csinálnak az osztályok. Nézzük az első effektet.

Tűz effekt

Nyissuk meg a ps_fireeffect.fla file-t Az fla 3 layerrel rendelkezik. Az egyik csak egy farakást illusztráló grafikát hordoz. A további kettő már érdekesebb.

Control layer:

1. frame:

import General.OSP_mcEventSource;
OSP_mcEventSource.init();

//**********************************

var t:Number = _root.getBytesTotal();
_root.onEnterFrame = function(){
     var l:Number = _root.getBytesLoaded();
     if ( l >= _root.t ){
          delete _root.onEnterFrame;
          _root.gotoAndStop(2);
     };
};


Mivel a tűz esetén folyamatos részecskeáramlásra van szükség, ezért a MovieClip osztályt el kell látnom a szükséges üzenő funkcionalitással, azaz beizzítom az OSP_mcEventSource osztályt. Először is be kell importálnom az osztályt, hogy az beépülhessen az swf file-ba:

import General.OSP_mcEventSource;

Utána meghívom az osztály statikus metódusát. Mivel statikusról beszélünk, ezért nincs szükség létrehoznom egy külön osztálypéldányt, hogy meghívhassam annak metódusát.

OSP_mcEventSource.init();

A további kóddal most nem foglalkozunk, magáért beszél! Az a lényeg, ha letöltődött a mozi, akkor ugorjon a főmozi második frame-jére.

2. frame:

stop()

Magáért beszél.

FireHolder layer

2. frame:

A layer egyetlen egy darab MC-ét tartalmaz. Ebben az MC-ben hozom létre a részecskerendszert. Ám mielőtt belemennénk a részletekbe. Nézzük meg közelebbről a tűz effektet, pontosabban annak részecske elemét. Már beszéltünk arról, hogy az adott részecske elem tulajdonságainak változtatását, sokszor legjobb a Flash animációs eszközeivel elintézni és nem AS-ből. A tűz részecske elem esetén ez így is történt.

Tűz részecske elem felépítése

A részecske elem az alábbiak szerint épül fel:

mcTheFlame->mcFlameContainer->mcFlameElement

MovieClip

Leírás

mcFlameElement

Ez a legegyszerűbb alkotórész! Csak egy, a szélei felé átlátszó körszerű pacát tartalmaz.

mcFlameContainer

Egy animációt tartalmaz, ahol az mcFlameElement színét, az advanced tint funkcióval megpróbáltam úgy változtatgatni, ahogyan a tűz is változtatgatja a színét.

mcTheFlame

Egy motion guide-ot tartalmaz, amely az mcFlameContainer-t próbálja egy olyan úton vezetni, amely szimulálja az igazi tűz lángnyelveinek játékát.

Ám az mcTheFlame MovieClip-nek két nagyon fontos tulajdonsága van. Az egyik, hogy az utolsó frame az alábbi kódot tartalmazza:

this.sendCustomMessage(this.ID);
this.stop();


Emlékezzünk rá, hogy az OSP_mcEventSource.init(); meghívásakor minden MovieClip megkap egy sendCustomMessage metódust, amely az "onCustomMessage" eseményt üzeni meg az adott MC listájára feliratkozott Figyelőknek.

Már ki is tisztult a kép. Amikor a tűz részecske elér az utolsó frame-re, akkor így üzen a Figyelőnek, ami a részecskegenerátor, hogy itt a vég, törölj és hozz helyettem létre egy új részecskét az ID-ém segítségével.

A másik fontos tulajdonság, hogy az mcTheFlame MovieClip rendelkezik egy azonosítóval, amely alapján a mozi attachMovie metódusa be tudja hívni. Ezt úgy tudjuk megadni, hogy a Library-ban jobb egér gombbal ráklikkelünk az mcTheFlame MC-re és kiválasztjuk a linkage. menüpontot. A felbukkanó ablakban, pedig megadjuk Identifiernek a "theflame" nevet, majd kijelöljük az "Export for ActionScript" és az "Export in first frame" opciókat. Nos a tűz részecskéről mindent tudunk. Térjünk vissza a FireHolder layer 2. frame-jére.

A layer-en található mcFireHolder első és egyetlen frame-én a következő kódot láthatjuk:

import ParticleSystem.OSP_keepAliveParticleSystem;
//
var centerPoint:Object = {x:0,y:0};
var posS:Object = {sX:25, sY:10, rot:30, size:0};
//
var FireObj:OSP_keepAliveParticleSystem = new OSP_keepAliveParticleSystem();

FireObj.objName = "FireObj";
FireObj.targetMC = this;
FireObj.particleCount = 50;
FireObj.linkName = "theflame";
FireObj.centerPoint = centerPoint;
FireObj.durationNum = 50;
FireObj.posScattering = posS;
FireObj.generateParticles();
//
stop();


Először is beimportálom a szükséges osztály-t:

import ParticleSystem.OSP_keepAliveParticleSystem;

A részecskerendszernek van két olyan tulajdonsága, amely Object típusú paramétert vár. Létrehozom az első object-et centerPoint néven, amelynek létrehozok két változóját x és y néven, illetve 0 és 0 értéken.

var centerPoint:Object = {x:0,y:0};

Ez annyit jelent, hogy a részecske elemek a hordozó MC 0,0 koordinátáján kezdenek el létrejönni. (A hordozó MC nem az mcFireHolder, hanem a részecskegenerátor által létrehozott segéd MC, az mc__OSP__particle__holder MovieClip.

A másik object-et posS néven, sX, sY, rot és size változókkal (tulajdonságokkal) a belsejében.

var posS:Object = {sX:25, sY:10, rot:30, size:0};

Az sX és sY azt az értéket adja meg, ahol a részecske _x és _y tulajdonsága, negatív megadott érték, a nulla és a pozitív megadott érték között, bármelyik értéket felveheti, véletlenszerűen.

A rot-nál megadott érték a részecske _rotation tulajdonságát, míg a size, a _xscale, illetve _yscale tulajdonságát befolyásolja. A size esetében meg kell jegyezni, hogy ha a size értéke nulla, akkor a részecske nem változtatja meg eredeti méretét a generálás alatt.

Létrehozzuk az OSP_keepAliveParticleSystem osztály egy példányát, FireObj néven.

var FireObj:OSP_keepAliveParticleSystem = new OSP_keepAliveParticleSystem();


Sorban beállítjuk a FireObj objektumunk tulajdonságait, azaz generálandó részecskerendszer tulajdonságait.

A részecske rendszer neve. Fontos, ha nem adjuk meg, akkor nem jön létre semmi.

FireObj.objName = "FireObj";

Megadjuk, hogy hová kérjük a részecskerendszert, ez akár más is lehetne. Akkor oda jönne létre. Ám itt most az mcFireHolder klipet választottuk.

FireObj.targetMC = this;

Megadjuk, hogy hány részecske elemből álljon a rendszer.

FireObj.particleCount = 50;

Megadjuk, a részecske elem link identifier-jét, azaz azt a nevet, amely alapján futásidőben beszippantjuk a kérdéses moziklipet.

FireObj.linkName = "theflame";


Megadjuk, a részecskerendszer létrehozásának középpontját a hordozó MC-én belül. Az ide várt paramétert állítottuk elő az elején.

FireObj.centerPoint = centerPoint;

Megadjuk, hogy hány frame lejátszódása alatt kell az összes részecske elemet létrehozni.

FireObj.durationNum = 50;

Végül, elindítjuk a részecskegenerálást.

FireObj.generateParticles();

A particleCount és a durationNum értékeivel játszadozva érdekes effekteket érhetünk el. Folyamatos részecskeáramlás szimulációjához, azonban a két értéknek közel azonosnak kell lennie.

Futtassuk a mozinkat. Ha minden igaz, akkor egy tűzszerű dolgot látunk magunk előtt, lobogni.

 
           
 
 

© Devnet.hu. A segédletek semmilyen formában nem másolhatók, publikálhatók a Devnet.hu és a szerzők közös írásos engedélye nélkül.
 
. .. : Swf.hu 1.0 archívum : Swf.hu főoldal >>> : .. .