Irány a 3. dimenzió
És máris szeretnék rátérni arra, ami az egész ingyenes fejlesztésnek értelmet ad.
Az Adobe fejlesztőeszközeinek van egy nagy hátránya. Hiányoznak belőle a 3D-s lehetőségek. Mondjuk a CS4-ben már kezd valami kibontakozni, de ez még korántsem tavasz...
A FlashSandy egy ingyenes, "nyílt forráskódú" Flash 3D fejlesztő osztály csomag. Én azért ezt használom, mert könnyen kezelhető és logikus felépítésű.
Kezdjük is el:
Innen letöltve, tömörítsük ki, majd a FlashDevelopment-ben a Project - Properties - Classpaths - Add Classpath ... menüpontok után keressük meg és válasszuk ki a kitömörített sandy könyvtárat (jelenleg sandy_3_0_2_src). A Project ablak így változik:
Egy minimális FlashSandy 3D programhoz szükségünk lesz a következő osztályok importálására:
import sandy.core.Scene3D;
import sandy.core.scenegraph.*;
import sandy.primitive.*;
Az első, a "Scene" lesz az a színpad, ahol a 3D összeállítás "szereplőit" felállítjuk. Szükségünk lesz egy kamerára, ami "nézi" a szereplőket, egy képernyőre, amire kivetítjük és legalább egy szereplőre aki játszik. A Scene3D ennek ad teret és ezeket mind összefogja: a kamerát, a képernyőt, és a szereplőket.
Fordított sorrendben fogunk dolgozni. Először létrehozunk egy szereplőt. Ez legyen egy "doboz". Más szóval egy kocka. Ez a primitive csomagban található és azért úgy hívjuk meg, hogy primitive.*, hogy a többi szereplőt is könnyen elő tudjuk hívni később. Szóval létre hozzuk a boxot:
public var box:Box = new Box("box");
Ezt a Main Function elé teszem, és azért public előtaggal, hogy amennyiben több eljárást írunk, mindegyikből látható és kezelhető legyen.
Létrehozok egy kamerát, ami felveszi Mr. Box műsorát:
public var camera3D:Camera3D = new Camera3D(800, 600);
A kamera konstruktorának (ez az az eljárás, ami a kamera létrehozásakor lefut és kezdőértékekekt ad neki) megadjuk a kamera felbontását. Ezt érdemes akkorának venni, mint a projektunk felbontása, illetve akkorára, mint amilyen felületre majd ki fogjuk vetíteni a képet (ez esetünkben a Flash projektünknek otthont adó Main Sprite).
Szükségünk van egy "csoportra", ami a színtársulatot összefogja. Ez lesz a helyi színjátszó kör. :)
public var g:Group = new Group("g");
És végül szükségünk lesz egy színpadra, ahol helyet adunk a játékra.
public var scene:Scene3D;
Ezt csak deklaráljuk, de létre még nem hozzuk, mivel ennek a konstruktorának meg kell adnunk paraméterként a képernyőt, amire "kivetítjük" majd a képet és a programunknak ebben a fázisában (még a Main konstruktor lefutása előtt" még nem áll készen. Éppen ezért, ezt csak a main konstruktoron belül tesszük meg, így:
public function Main():void
{
scene = new Scene3D("scene", this, camera3D, g);
...
Tehát, sorrendben, a Scene3D konstruktorának a paraméterei:
- a neve
- a második paraméter az a Sprite, amire ki akarjuk vetíteni a 3D képet. Mivel mi a projektünk Main Sprite-ját fogjuk erre használni, elég úgy hivatkozni rá, hogy this.
- a harmadik paraméter maga a kamera
- a negyedik pedig a színjátszó csoport, ami összefogja a szereplőket. Ez jelenleg még üres, de mindjárt hozzárendeljük Mr. Box-ot. Így:
g.addChild(box);
Ezzel adjuk hozzá a szereplőket a csoporthoz. Casting. :)
És felvétel indul!
scene.render();
Ezzer rendereljük a kamera képét a vászonra.
A teljes program így néz ki:
package
{
import flash.display.Sprite;
import flash.events.Event;
import caurina.transitions.Tweener;
import sandy.core.Scene3D;
import sandy.core.scenegraph.*;
import sandy.primitive.*;
public class Main extends Sprite
{
public var box:Box = new Box("box");
public var camera3D:Camera3D = new Camera3D(800, 600);
public var g:Group = new Group("g");
public var scene:Scene3D;
public function Main():void
{
scene = new Scene3D("scene", this, camera3D, g);
g.addChild(box);
scene.render();
}
}
}
Ha minden jól ment, valami ilyesmit látunk: