. .. : 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

           
 

Objektum alapú programozás

Mielőtt elkövetném azt a hibát, hogy Én is leírom az objektum alapú programozás (Object-Oriented Programming, OOP) lényegét, felkérek minden olvasót, - aki nincs tisztában a dologgal - hogy olvassa el Tenegri fórumtársunk segédletét a témában. Persze más OOP nyelvek leírásait is nézhetjük, itt kiemelten ajánlom a JAVA és a C++ leírásokat, de az ActionScript-hez legközelebb a JavaScript 2 áll. Az interneten sok ingyenes leírás található C++-ban és JAVA-ban. Szerintem ez egyik legjobb a http://www.bruceeckel.com címen érhető el. Ingyenesen letölthető könyvek vannaik itt.

Az AS2 szintaktikát, amely az osztályokra vonatkozik a Flash help dokumentációjában megtaláljátok. Itt most csak egy nagyon gyors és felületes ismertetőt írok le.

AS2 szintaktika röviden, osztályok esetén

Egy osztály létrehozása:

Class Osztalynev{
};

A class kulcsszót használjuk AS2-ben az osztály létrehozására.

Amikor egy osztályt létrehozunk, akkor az abban az osztályban használt változókat (tulajdonság) jobb az osztály elején összegyűjteni, definiálni. Így érthetőbb a kód. Egy osztályban a változót azelőtt definiálunk kell, mielőtt felhasználnánk. A változók, függvények (metódusok) definiálásakor egy úgynevezett szigorú típusosságot kell alkalmaznunk. Azaz előre meg kell mondani, hogy milyen típusú lehet, a deklarált változó értéke.

Class Osztalynev{
     var retek:String;
};


Amikor egy osztályban metódust definiálunk, akkor azt függvénnyel tesszük:

Class Osztalynev{
     
var retek:String;
      function kiVagy(){
          trace("Vanek Úr!");
     };
};


Amikor olyan metódust hozunk létre, amelynek visszatérési értéke van, akkor meg kell adnunk a visszatérési érték elvárt típusát:

Class Osztalynev{
     var retek:String;
     function kiVagy(){
          trace("Vanek Úr!");
     };
     function eletErtelme():Number{
          return 42;
     };
};


Ha egy osztályt használni szeretnénk, akkor az osztály instance-ét az alábbi módszerrel hozzuk létre:

var instanceOsztaly:Osztalynev = new Osztalynev;

Flash MX 2004-ben az osztályokat külön AS file-okban kell létrehozni. Egy AS file csak egy osztályt tartalmazhat. Az AS file-t ugyanolyan néven kell elmenteni, mint a deklarált osztály neve. A Flash MX 2004-nek meg kell adni, hogy az osztályokat tartalmazó AS file-okat hol találja. Ha ezt nem tesszük meg, akkor az fla swf-fé alakításakor hibaüzenetet kapunk, hiszen a hívatkozott osztályokat nem tudja betölteni. Ezt a Flash MX 2004-ben, az Edit/Preferencies/ActionScript/ActionScript 2. Settings menüpontban tehetjük meg. Továbbá az osztály deklarációját, névadását úgy kell megtenni, hogy a neve is tartalmazza az adott AS file elérését. Például, ha egy AS file-t elmentünk a myClass/General/ könyvtárba, akkor az osztály nevének így kell kinézni:

Class myClass.General.Osztalynev{
};


Amikor elkezdünk osztályokat létrehozni, tanácsos átgondolni a könyvtár struktúrát is. Így megelőzhetjük a káoszt, és talán 3 hónap múlva is emlékszünk, hogy, mit, hová tettünk. Az osztályok származtatását az extends kulcsszó használatával tesszük meg:

Class masikOsztaly extends Osztalynev{
};


Ilyenkor a masikOsztaly örökli minden az Osztalynev osztaly minden tulajdonságát. Az osztályok tulajdonságai, metódusai három félék lehetnek:

•  Public
•  Private
•  Static

Minden tulajdonság és metódus alapon publikus. Abban az esetben változik ez meg, ha direkt private-ként vagy static-ként dekraláljuk. A public azt jelenti, hogy az adott tulajdonság vagy metódus elérhető az osztályon kívül. Azaz meghívható, lekérdezhető! A private-ként deklarált tulajdonságokat, metódusokat nem lehet elérni az osztályon kívülről, csak belülről.

Amikor egy objektum instance-ét létrehozzuk hozni a Flash moziban, akkor a teljes elérési úttal kell hívatkoznunk:

var instanceOsztaly = new myClass.General.Osztalynev();

Vagy

var instanceOsztaly: myClass.General.Osztalynev = new Osztalynev();

Vagy az import kulcsszó használatával:

import myClass.General.Osztalynev
var instanceOsztaly = new Osztalynev


Amikor egy osztály tulajdonságait kívülről változtatni szeretnénk, akkor két megoldást választhatunk:

• Vagy dekralálunk egy függvényt amelyet meghívva és paraméterrel ellátva beállítjuk a tulajdonságot:

Class Osztalynev{
     var retek:String;
     function retekBeallit(param:String){
          this.retek = param;
     };
};

var instanceOsztaly:Osztalynev = new Osztalynev;


• Vagy használjuk az implicit get/set metódusokat, amelyeknek lényege, hogy ugyanúgy nevezzük el azokat a metódusokat, amelyek beállítja és amelyek lekérdezi az adott tulajdonság értékét. Az osztályon belül semmi más nem lehet azonos névvel.

Class Osztalynev{
     var retek:String;
     function set retekBeallit(param:String){
          this.retek = param;
     };
     function get retekBeallit():String{
          return this.retek;
     };
};

var instanceOsztaly:Osztalynev = new Osztalynev;
instanceOsztaly.retekBeallit = "Piros"


Látható, hogy ebben az esetben úgy adunk értéket, illetve úgy kérjük le az értékét, mintha az egy változó lenne és nem függvény. Ezekkel a módszerekkel remekül elrejthetjük az osztály tulajdonságait a direkt eléréstől. Általában nem szokás egy osztály tulajdonságaihoz direkt elérést biztosítani. Jelen segédletben nem térek ki minden, az osztályokat érintő AS2 parancsokra, ilyen az interface is, amely most számunkra nem szükséges.

A részecskerendszer

Örülök, hogy túl vagyok az elején! Remélem érdekes volt eddig! Mindig az alapozás a legfárasztóbb és a legunalmasabb! A részecskerendszer összeütésekor az alábbi lépéseken haladunk végig:

•  Ötletélés
•  Tervezés
•  Megvalósítás
•  MovieClip - saját eseménykezelő megvalósítása
•  Core: ParticleSystem
•  Effektek ( Tűz, hóesés, robbanás)

Mielőtt bármibe is belekezdünk, végig kell gondolnunk, hogy milyen tulajdonságokkal, funkcionalitással kell rendelkeznie, a Mi kis részecskerendszerünknek. Akinek van, valamely, részecskerendszereket is támogató 3D modellező alkalmazásban tapasztalata, annak könnyű dolga van. Hiszen nincs szükség jobb példára, de a Flash esetén erős megszorításokat kell tennünk.

A Flash player egy roppantul erőforrás-zabáló valami. Nem lehet nagy számú grafikai elemet mozgatni, vagy sok számítást igénylő műveletet, nagy számban, végeztetni vele. Gyakorlatilag ez egy örök harc a gép erőforrásaiért. Általában nem várható el az emberektől, hogy egy jól sikerült effekt miatt, erősebb gépet vásároljanak.

Inkább azokat a tulajdonságokat kell összeszedni, amelyeket feltétlenül tudnia kell egy részecskerendszernek:

•  Beállítható legyen a rendszert felépítő részecske elemek száma
•  Beállítható legyen egy adott részecske elem életciklusa (meddig van jelen a moziban)
•  Beállítható legyen, hogy mennyi idő alatt jöjjön létre az összes részecske elem
•  A részecske elemek rendelkezhessenek önálló tulajdonságokkal:
•  Szín
•  Bejárt útvonal
•  Méret
•  Pozíció

Itt abba is hagyom a felsorolást, mert már az eddig felsorolt funkciók megvalósítása is elég kezdetnek.
Most nézzük meg a felsorolást azzal a szemmel, hogy, hogyan lehetne a legegyszerűbben megvalósítani a Flash-ben.

Mintahogyan azt Dodon, a nagyszerű hóesés effekt segédletében már megfogalmazta, nem kell mindent AS-ben megoldani, hiszen a Flash nagyszerű animációs eszköz és ezt ne felejtsük el. A szétbontást is így t ettem meg. Külön, amelyet AS-ből kívánok vezérelni és külön, amelyet nem, illetve az AS esetén rögtön meg is feletetem valami Flash-es terminológiának.

Flash animációs eszköztárát használva

Flash terminológia

Beállítható legyen egy adott részecske elem életciklusa (meddig van jelen a moziban)

Egész egyszerű: addig van jelen a moziban, amíg tart a részecske belső animációja, azaz ahány frame-ből áll.

A részecske elemek rendelkezhessenek önálló tulajdonságokkal:
•  Szín
•  Bejárt útvonal
•  Méret
•  Pozíció

Ezt szintén az animációs eszközökkel (pl.: shape tween, alpha, tint, advanced tint) oldom meg.



AS-t használva

Flash terminológia

Beállítható legyen a rendszert felépítő részecske elemek száma

Egy változóban tárolom az értéket és annyi kis MovieClip-et (részecskét) hozok létre duplikálással, vagy becsatolással (attachMovie), amennyi a változó értéke.

Beállítható legyen egy adott részecske elem életciklusa (meddig van jelen a moziban)

A részecskéken belül is futhat önállóan valami kód, amely determinálja a részecske életciklusát. Jelen segédletben csak egy aprócska kód lesz az MC utolsó frame-jén.

A részecskéket további "ésszel" is el lehet látni, de azt már az olvasóra bízom.

Beállítható legyen, hogy mennyi idő alatt jöjjön létre az összes részecske elem

A Flash moziban elsősorban a frame-k egymás utáni lejátszódása jelenti az idő múlását, így átfordítom a dolgot: hány frame alatt jöjjön létre az összes részecske.

A részecske elemek rendelkezhessenek önálló tulajdonságokkal:
•  Méret
•  Pozíció

_x, _y, _xscale, _yxscale tulajdonságok állítgatása


Látható, hogy van bizonyos átfedés, de ez gyorsan megmagyarázható. Ha létrehozok egy olyan animációt, a Flash animációs eszközeit használva, amely hol nagyobb, hol kisebb kiterjedésű részecske elemet eredményez, akkor arról beszélünk, hogy változtatom a méretét. Ugyanakkor szintén erről beszélünk, ha generáláskor szintén változó méretekben helyezem a részecske elemeket a moziba. Ugyan ez az összefüggés fennáll a pozíció esetében is.
 
           
 
 

© 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 >>> : .. .