Hallgatói segédlet a
Macromedia Director MX használatához – kézirat –
www.adobe.com
Ez a jegyzet a Macromedia Director MX használatát muatatja be, követve az órai tananyag tematikáját. A jegyzet emiatt hiányos, csak azokat a témaköröket és csak olyan mélységben tárgyalja, amelyeket és ahogyan azokat a gyakorlatokon feldolgozunk. A jegyzet kézirat. Nincs lektorálva, átnézve, emiatt mindenféle hibák előfordulhatnak benne. Éppen ezért a vizsgára való felkészülést legfeljebb kiegészíti, de az órai jegyzeteket semmiképpen sem pótolja. Az esetleges hibákért elnézést kérek, de mivel a jegyzet lektorálatlan, az általuk esetlegesen okozott kellemetlenségekért nem vállalok felelősséget. Kérem, hogy ezt a jegyzet használatakor tartsák szem előtt! Ugyanakkor minden észrevételt szívesen várok a
[email protected] címre. Tömösközi Péter
TARTALOMJEGYZÉK BEVEZETÉS A MACROMEDIA DIRECTOR MX HASZNÁLATÁBA A képernyő elemei A színpad (Stage) A szereposztás (Cast) A forgatókönyv (Score)
5 5 7 8 8
SZKRIPTEK Szkripttípusok Mikor kapnak vezérlést a különböző típusú szkriptek? Milyen eseményeket kezelnek az eseménykezelők? Összefoglalás
12 13 13 14 15
KÉSZÍTSÜK EL AZ ELSŐ PREZENTÁCIÓT! A mozi létrehozása és beállításai A szereplők importálása A prezentáció összeállítása A háttér elhelyezése A feliratok elhelyezése Állítsuk meg a lejátszófejet! A helyszínekhez tartozó oldalak elkészítése Tegyük interaktívvá a prezentációt! Utolsó simítások A háttérzene és a vizuális effektusok beállításai A prezentáció publikálása Projector készítése Shockwave-állomány készítése
16 16 17 18 18 19 21 22 24 25 26 26 26 27
KULCSKÉPKOCKÁK ALKALMAZÁSA Elhalványodik a háttérkép Kulcsképkockát tartalmazó sprite-ok hosszának módosítása Sprite-ok mozgatása a színpadon Sprite-ok nagyítása, forgatása, megdöntése
28 28 30 30 32
ANIMÁCIÓ Filmciklus készítése Animált GIF felhasználása Mozgó sprite pályájának beállításai Real-time recording
32 32 33 33 34
ROLL-OVER GOMBOK KÉSZÍTÉSE A mouseEnter és mouseLeave események kezelése A mouseDown esemény kezelése
37 37 38
A BILLENTYŰZET KEZELÉSE LINGO-SZKRIPTEKBŐL Billentyűkódok meghatározása
40 40
SPRITE MOZGATÁSA BILLENYŰZET SEGÍTSÉGÉVEL Az animált GIF tulajdonságainak beállítása Sprite helyének változtatása Lingo-szkriptben Animált GIF tükrözése és megállítása
41 41 42 42
SPRITE-OK MEGJELENÍTÉSE LINGO-SZKRIPTEKKEL A puppet csatornák
43 43
KÉPERNYŐEFFEKTUSOK ÉS ZENE KEZELÉSE SZKRIPTEKBEN A prezentáció beállításai A startMovie eseménykezelő Zenecsatornák vezérlése Lingo-szkriptekből Zene lejátszása, szüneteltetése, megállítása Hangerő A billentyűzetkezelő szkript A puppetTransition parancs Még egyszer a hangerőről
45 45 46 46 47 47 47 49 49
TESZT KÉSZÍTÉSE DIRECTORRAL
49
4
Bevezetés a Macromedia Director MX használatába A Macromedia Director MX vizuális prezentációk készítésére alkalmas szoftver, mely számos szöveg-, álló- és mozgókép-, hang- és videofájl-formátumot támogat, így kitűnően alkalmas multimédiás prezentációk létrehozásához. Az elkészült prezentációkból kétféle kimenet állítható elő. Az egyik lehetséges kimenet a Projector, amely egy önállóan indítható EXE-állomány. A projector-állományok semmilyen egyéb kiegészítő állományt nem igényelnek a futtatáshoz (pl. DLL-ek, stb.), így elegendő csupán ezt az egyetlen állományt a célgépre másolni, és az máris futtatható lesz, telepítést sem igényel. (Megyjegyzés: nagy méretű, sok médiaelemet tartalmazó prezentációk esetében nem ez az optimális módszer, mivel az így készített EXE-fájl mérete gigantikus is lehet, amely a futtatást igencsak lassíthatja.) A másik lehetőség a prezentációk publikálására a Shockwave-formátum (.DCR), amely – hasonlóan egy Flash-mozihoz – weboldalakba ágyazható. Ha így publikáljuk kész prezentációnkat, a Director elkészíti a DCR-fájlt, illetve azt a HTML-kódot, amelyet weboldalunkba ágyazva a prezentáció lejátszható. Természetesen ahhoz, hogy ezeket a DCR-állományokat le tudjuk játszani egy számítógépen, szükséges egy böngésző, mely megjeleníti a mozit tartalmazó weboldalt, illetve az adott gépen (tehát a kliensoldalon) egy megfelelő lejátszóprogramra, egy Shockwave-playerre. Ha a weboldalba azt a HTML-kódot ágyazzuk be, amit a Director hoz létre a prezentáció publikálásakor, akkor – ismét csak a Flash-mozikhoz hasonlóan – abban az esetben, ha a lejátszó nincs telepítve az adott gépen, az kérésre automatikusan letöltődik az Adobe webszájtjáról és egy-két lépés után automatikusan fel is telepítődik a gépre. Shockwave-player minden gyakori operációs rendszerhez (illetve böngészőhöz) létezik, így gyakorlatilag elmondható, hogy a publikált prezentáció bármilyen gépen lejátszható.
A képernyő elemei A Directorban egy prezentáció készítésekor azt kell elképzelnünk, mintha egy színházi előadást (vagy éppen mozifilmet) készítenénk. Az előadás maga a prezentáció, melyben szereplők (cast member) jelennek meg. A szereplőket a szereposztás (cast) tartalmazza. A szereplők a színpadon (stage) jelennek meg, ez gyakorlatilag az az ablak, amelyben a prezentáció futni fog. Hogy melyik szereplő mikor jelenjen meg és meddig legyen látható a színpadon, az a forgatókönyv (score) segítségével szabályozható. Ahhoz, hogy egy szereplő megjelenhessen a színpadon, a forgatókönyvben hozzá kell rendelnünk egy sprite-ot. Egy sprite egy időben egy szereplőt jelenít meg a színpadon. A forgatókönyvben a sprite-okat csatornákon (channel) helyezhetjük el. A csatornák száma alapértelmezés szerint 150, ami azt jelenti, hogy egyszerre 150 sprite (vagyis szereplő a szereposztásból) jelenhet meg a színpadon (azaz a képernyőn). Ez egyrészt szükségtelenül nagy szám, egyszerre valószínűleg nincs szükség ennyire a képernyőn, az elégedetlenkedők számára azonban jó hír, hogy ez a szám még növelhető is. A forgatókönyv hossza pedig Lejátszáskor a forgatókönyön elindul a lejátszófej, melynek sebességét a prezentáció alatt bármikor meg lehet változtatni. A színpadon azok a sprite-ok fognak látszani, amelyek fölött a mozgó lejátszófej éppen elhalad. A sprite-ok számos tulajdonsággal rendelkeznek, meghatározzák pl. a megjelenített szereplő helyzetét a színpadon, vagy pl. annak nagyságát, háttérszínét, láthatóságát, stb. Az, hogy egy sprite melyik szereplőt jeleníti meg, szintén csak egy tulajdonság, amelyet – hasonlóan a fentiekhez – futás közben is meg lehet változtatni. Más szóval: egy sprite-nak nem kell feltétlenül mindvégig ugyanazt a szereplőt megjelenítenie. Ügyetlen analógiával elképzelhető ez a dolog úgy is, mintha egy színész dolga csak annyi len5
ne, hogy a szereposztás egyik szereplőjének a ruhájába bújva kiáll a színpadra, így jelenítve meg a színdarab egyik szereplőjét. Adott pillanatban aztán hirtelen átöltözik, és máris egy másik szereplőt jelenít meg. (A színészet ennél azért nyilvánvalóan több!) A lényeg tehát az, hogy nem szabad egy sprite-ot feltétlenül egy adott szereplővel azonosítani. Egyrészt semmi akadálya, hogy egy szereplőhöz több sprite-ot is rendejünk, ami azt eredményezi, hogy az adott szereplő több példányban is megjelenik a színpadon, másfelől gyakran szükség lehet arra, hogy egy sprite-hoz rendelt szereplő megváltozzon, azaz a képernyő ugyanazon pontján egy sprite egyszercsak egy másik szereplőt mutasson meg. Ezt a lehetőséget a roll-over gombok készítéséről szóló fejezetben alaposan ki fogjuk használni.
1
2 3
1 – A színpad (Stage), 2 – A forgatókönyv (Score), 3 – A szereposztás (Cast) A képernyőn a fenti ábrán látható három képernyőrészt célszerű mindig bekapcsolva tartani, még ha ez néha kissé nehézkesen oldható is meg. Ha valamit mégis ki (vagy be) szeretnénk kapcsolni, a Window menüt kell használnunk. A képernyő bal szélén látható a Director eszköztára (Tools), jobb oldalon pedig olyan paletták, amelyeken a prezentáció különböző beállításait tehetjük meg, illetve egyéb segédszolgáltatásokat találunk. Ezek között legfelelül látható a Property Inspector, mely az éppen aktuálisan kijelölt objektum (ami lehet pl. a teljes mozi, annak egy szereplője, vagy egy sprite stb.) tulajdonságait jeleníti meg. Ezt is célszerű bekapcsolva tartani – nem is lehet kikapcsolni. Elrejteni lehet csak, ehhez a paletta szélét jelző függőleges keret közepén elhelyezett nyilat kell használnunk: Lássuk most az egyes képernyőelemek jellemzőit részletesen! 6
A színpad (Stage) Ahogyan azt korábban leírtuk, a prezentáció szereplői a színpadon jelennek meg. Ez a kijelentés két kiegészítést igényel. Egyrészt egy prezentációban felhasználhatunk zenéket, illetve egyéb audio-fájlokat, de ezek nyilvánvalóan nem a színpadon fognak megjelenni, hanem a hangszórókon, headseteken lesznek hallhatók. Ennek megfelelően nem is azokon a csatornákon kell az majd őket lejátszó sprite-okat elhelyeznünk, ahol a vizuális elemeket (álló- és mozgóképeket, szövegeket). A zenecsatornák használatáról részletesen olvashatunk a transitionöket bemutató fejezetben. A másik kiegészítés a vizuális elemeket megjelenítő sprite-okhoz kapcsolódik. Nem pontos az az állítás, hogy egy sprite mindig megjelenít egy adott szereplőt, ugyanis – mint később, az animációs fejezetben látni fogjuk – egy sprite elhelyezhető a színpad hasznos részén kívül is, úgymond a „takarásban”. Ilyenkor a képernyőn természetesen nem fog látszani, annak ellenére, hogy a forgatókönyvben szerepel. Ott lesz, csak nem fog látszani: képzeljük azt, hogy a prezentációt futtató ablakon kívül van. Ennek akkor vehetjük majd hasznát, ha egy sprite-ot szeretnénk bemozgatni, beúsztatni a képernyőre. Mint később látni fogjuk, a sprite-okat igen egyszerűen lehet mozgatni a színpadon, illetve a takarásból a színpadra, vagy a színpadról a takarásba.
2
1
2
1 – A színpad hasznos része, amit ide helyezünk, az látszani fog a prezentáció futása során 2 – Ezek a részek „takarásban” vannak. Amit ide helyezünk, az nem fog látszani a prezentáció futásakor, de a prezentáció ugyanúgy tudja vezérelni, mint a látható médiaelemeket A színpad ablakának alján, a nagyítás fokának és a vízszntes gördítősávok alatt a vezérlőpult (Control Panel) fontosabb nyomógombjai láthatók. A prezentáció futása ezekkel a gombokkal is vezérelhető. A színpad (és a teljes prezentáció) beállításai a Property Inspectoron találhatók. Ahhoz, hogy ezeket beállíthassuk, először kattintsunk egyet a színpad ablakára, majd keressük a Property Inspectoron a Movie fület: 7
Lássuk ezek közül a fontosabbakat: Stage Size – a színpad mérete pixelekben. Location – a prezentációablak bal felső sarkának koordinátái a képernyő bal felső sarkához képest. Ennek publikálás után vagy teljes képernyős futtatás után van jelentősége. Mindkét fenti érték beírással is megadható, vagy a beviteli mezők melletti nyílra kattintva kiválasztással is beállítható. Channels – a forgatókönyv csatornáinak száma. Color – a színpad háttérszíne. Megadása a HTML-ben ismert módon lehetséges, illetve a beviteli mező melletti kiválasztó eszközre kattintva is megtörténhet. A szereposztás (Cast) Amint korábban olvashattuk, a prezentációban felhasználni kívánt médiaelemeket a szereposztásba kell importálnunk, mielőtt fel akarjuk azokat használni. Kiegészítésként megjegyezzük, hogy a Director arra is kínál lehetőséget, hogy bizonyos állományokat anélkül is felhasználjunk egy prezentációban, hogy azokat a szereposztásba importálnánk, illetve egy prezentációhoz több (külső) szereposztás is rendelhető. Mint azt később majd látni fogjuk, a szereposztásba nem csak olyan médiaelemek kerülhetnek be, amelyeket oda beimportálunk, hanem a Director által létrehozott szereplők is (pl. nyomógombok, vonalak, síkidomok, szövegek, transitionök, szkriptek, stb.). A szereposztásnak kétféle nézete van, melyek között az ábrán jelölt gombbal lehet választani. Mellette a két nyíllal az előző ill. következő szereplő tehető aktuálissá (ugyanezt kattintással is megtehetjük). Ezek mellett az aktuális szereplő neve látható illetve adható meg. Az ábra egy üres szereposztást mutat. Minden szereplő rendelkezik egy sorszámmal, és kaphat egy nevet is. Ha egy szereplő nevet kap, a forgatókönyvben elhelyezett sprite-ján ez a név jelenik meg. Ha egy szereplőt nem nevezünk el, a forgatókönyvben a sprite-ja a szereposztásbeli sorszámát fogja mutatni. A szereplők importálásához valamelyik szereplőhelyre kell kattintanunk jobb gombbal, majd a helyi menüből válasszuk az Import menüpontot. Egyszerre több – akár különböző fájltípusú – szereplő is beimportálható. Fontos tudni, hogy mindig azt a fájlt importáljuk arra a szereplőhelyre, amin kattintottunk, amelyre utoljára kattintunk több fájl kijelölésénél. A többszörös fájlkijelölés a szokásos módon, a Ctrl és a Shift gombok használatával, illetve az egérrel történő „bekeretezéssel” történhet. A forgatókönyv (Score) A szereplők megjelenítésének (lejátszásának) egyik módja, ha elhelyezzük őket a forgatókönyvben. Egy másik módszer, ha szkriptekkel vezéreljük őket. Ebben az esetben akár úgy is létrehozhatunk működőképes prezentációt, hogy a forgatókönyv teljesen üres. A harmadik megoldás – ez a leggyakoribb –, hogy a forgatókönyvet is használjuk, és szkripteket is készítünk. A szkriptekről a következő fejezetben részletesebb leírás olvasható. Egy szereplő elhelyezése a prezentációban – ha nem szkripttel valósítjuk meg – kétféle 8
módon történhet. Az egyik, ha a szereposztából a forgatókönyvbe húzzuk a szereplőt az egérrel, a másik, ha a színpadra. Mindkét esetben létrejön egy sprite a forgatókönyvben, amelyet egy – alapértelmezés szerint 28 frame hosszúságú – kék téglalap jelöl. Megjegyzés: a sprite-ok alapértelmezett hosszát megváltoztathajuk az Edit > Preferences > Sprite menük választásával, és a Span duration értékének megadásával.
A sprite-ok létrehozásának egyik módja, ha a szereposztásból a forgatókönyvbe húzzuk őket az egérrel A két módszer között a fő különbség az, hogy amikor a színpadra húzzuk a szereplőt, akkor azzal egyben a színpadi helyzetét is megadjuk (más szóval: ott lesz a képernyőn az adott médiaelem, ahová húztuk). Ha a forgatókönyvbe húzzuk a szereplőt, akkor annak a színpadon való elhelyezkedését a regisztrációs pontja (Registration point) fogja meghatározni. Képek esetében a regisztrációs pont alapértelmezés szerint a kép középpontja, szövegek esetében pedig a szöveget megjelenítő doboz bal felső sarka. Ha a szereplőt a szereposztásból a forgatókönyvbe húzzuk, a regisztrációs pontja automatikusan a színpad középpontjába kerül. Más szavakkal: ha egy képet ábrázoló szereplőt a forgatókönyvbe húzunk, akkor az alapértelmezés szerint automatikusan a színpad közepén jelenik meg, ha egy szöveges szereplőt húzunk a forgatókönyvbe, akkor az azt tartalmazó szövegdoboz bal felső sarka lesz a színpad közepén. A szereplők regisztrációs pontjának helye megváltoztatható, bár erre ritkán lesz szükségünk (képek esetében kattintsunk a képet tartalmazó szereplőn duplán, és a beépített képszerkesztőben áthelyezhetjük a regisztrációs pontot). Ami fontosabb: ha szkriptekből szeretnénk egy sprite színpadon való elhelyezkedését manipulálni, akkor annak egyik lehetséges megvalósítása szintén a regisztrációs pontokkal történhet. 9
Ezen az ábrán egy képet húztunk a forgatókönyvbe. Mivel egy kép regisztrációs pontja a kép középpontjan van (alapértelmezés szerint), a kép a színpad közepén jelent meg
A szöveget tartalmazó szereplőből létrejött sprite bal felső sarka került a színpad közepére 10
A forgatókönyvben tehát csatornákat találunk, amelyeken a szereplőkhöz rendelt spriteokat helyezhetjük el. A csatornák sorszámozva vannak (alapértelmezés szerint 1-től 150-ig), a csatornákon elhelyezett sprite-ok pedig képkockákból (frame) állnak. Mint azt korábban olvashattuk, egy sprite alapértelmezés szerint 28 frame hosszúságú. Amikor elindítjuk egy prezentáció lejátszását, a lejátszófej (Playhead) a megadott sebességgel haladni kezd a forgatókönyvben. (A lejátszófej egy piros színű téglalapként jelenik meg.) A színpadon azok a sprite-ok fognak látszani, amelyek a lejátszófej által kijelölt pillanatban a forgatókönyvben helyet foglalnak. Előfordul, hogy két vagy több sprite valamekkora része azonos területre esik a színpadon, más szóval valamilyen mértékben takarják egymást. Mindig az a sprite látszik teljes terjedelemben, amelynek nagyobb a sorszáma. Így ha egy-egy képet helyezünk el az 1-es és a 2-es számú csatornákon, és ezeket a színpadon egymás fölé igazítjuk, akkor a 2es csatornán található kép takarni fogja az 1-es csatornán lévőt. A forgatókönyvnek van egy alapértelmezés szerint rejtett része is, ahol az ún. effektuscsatornákat (Effects Channels) találjuk. Ezeket úgy tudjuk megjeleníteni/elrejteni, ha a frame-ek sorszámát megjelenítő rész fölé állunk az egérrel a csatornák sorszáma fölötti részen, majd jobb gombbal kattintva a helyi menüben az Effects Channels menüpontot választjuk. Az effektuscsatornák fentről lefelé a következők: • Egy stopperóra jelöli a Timer channelt. Ezen a csatornán olyan egy frame hosszúságú sprite-okat helyezhetünk el, amelyekkel a lejátszófej sebességét szabályozhatjuk (alapértelmezésben ez 30 frame/sec), megállíthatjuk azt egy megadott időtartamra, vagy egy esemény bekövetkeztéig (ez lehet egérkattintás, billentyűleütés, vagy Cue Point, mely a médiaelemekkel való szinkronizációt segítő eszköz). • Alatta látható a Palette channel, melynek használatát ez a jegyzet nem tárgyalja. • Transition channel: ezen olyan sprite-okat helyezhetünk el, amelyekkel képernyőeffektusok, más szóval transitionök ágyazhatók a prezentációba. Érdemes megjegyezni, hogy minden transition, melyet ezen a csatornán helyezünk el, szereplőként megjelenik a szereposztásban is. Ez többek között azért is előnyös, mert egy transition ezáltal újrafelhasználható lesz. Más szóval: ha szeretnénk egy bizonyos képernyőeffektust többször is felhasználni a prezentációban, akkor azt elég egyszer beállítani, és akárhányszor beszúrhatjuk a mozi futása során. A transitionök jellemzőiről részletesebben olvashatunk a példafeladatoknál. • A két hangcsatorna (Sound channel 1, 2): itt magától értetődően zenei, illetve egyéb audiószereplők sprite-jai helyezhetők el. Fontos tudnivaló, hogy a zenei csatornákon elhelyezett sprite-ok hossza nem befolyásolja a lejátszott hang sebességét. Például ha egy adott hosszúságú zenei fájlt szereplőnek importálunk, majd elhelyezzük az egyik zenei csatornán először egy 10 frame, majd egy 20 frame hosszúságú sprite-ként, a 10 frame hosszúságú sprite nem kétszer olyan gyorsan fogja eljátszani a zenét, mint a 20 frame hosszúságú: a 11
lejátszás sebessége mindkét esetben azonos lesz. Annyi különbség lehetséges a két lejátszás között, hogy a 10 frame hosszúságú sprite lejátszásakor hamarabb megáll a zene, de a későbbiekben látni fogjuk, hogy ez sem feltétlenül biztos. A zenei sprite-ok hossza tehát nem befolyásolja a lejátszás sebességét, de befolyásolhatja a zene vagy hang időtartamát (ami azzal járhat, hogy nem fog elhangozni a teljes zenemű vagy hang, hanem idő előtt félbeszakad). Egy szintén fontos tudnivaló: ha a forgatókönyvben vezéreljük a prezentációnk hangjait, akkor csak két hangcsatorna áll rendelkezésünkre, és ez időnként kevés lehet. Gondoljunk arra az esetre, amikor a prezentációnkban háttérzene szól (egyik csatorna), egy adott szöveget felolvas egy narrátor (másik csatorna), és mi szeretnénk, ha a képernyőn látható nyomógombokra kattintva még valamilyen hangeffektus (pl. kattanás) is hallatszana. Csak a forgatókönyv hangcsatornáit használva ez nem lehetséges. Szkriptek alkalmazásával azonban nyolc hangcsatorna áll rendelkezésünkre, amely valószínűleg bármilyen feladat megoldásához elegendő lesz. • Szkriptcsatorna (Script channel): ez a csatorna akkor is látszik, ha az effektuscsatornákat elrejtjük. Ezen a csatornán olyan 1 frame hosszúságú sprite-okat helyezhetünk el, melyek a szereposztásban találhatók és szkripteket tartalmaznak. A szkriptekkel a következő fejezet foglalkozik részletesen. Az effektuscsatornák fölött található a könyvjelzők (Marker) elhelyezésére szolgáló terület – ezt nem jelzi külön piktogram. A markerekkel nevet adhatunk az egyes képkockáknak, ezzel könnyítve a rájuk való hivatkozást. Amikor a lejátszófejet a szkriptekben szeretnénk vezérelni, akkor hivatkoznunk kell az egyes képkockákra. Ha nem szeretnénk képkockasorszámokat fejben tartani, rendeljünk hozzájuk beszédes nevű markereket.
A markerek elhelyezéséhez kattintsunk a csatornák fölötti sávon egyet az egérrel. A marker nevének megadása egyszerű begépeléssel történik, a markerek neve tartalmazhat ékezetes betűt és szóközt is. A markerek húzással áthelyezhetők, ha pedig függőlegesen kihúzzuk őket a sávról (akár fel, akár le), azzal törölni tudjuk őket
Szkriptek A Macromedia Director MX programozásához külön programozási nyelv használható, melynek neve Lingo. (Megjegyzés: az MX 2004 verzióban Lingo mellett JavaScriptben is kódolhatunk.) A programokat (szkripteket) a prezentáció különböző objektumaihoz rendelhetjük hozzá. Bár a Director többféle szkripttípust ismer, a szkriptek vizsgálatakor mi az alábbi csoportosítást fogjuk alapul venni. 12
Szkripttípusok • Forgatókönyvszkriptek: az ilyen típusú szkriptek önálló szereplőként jelennek meg a szereposztásban. Előnyük az, hogy hozzárendelhetők a forgatókönyv bármelyik szereplőjéből készített sprite-hoz – annak típusától függetlenül. Egy forgatókönyvszkript tehát hozzárendelhető a forgatókönyvben elhelyezett bármelyik sprite-hoz, de akár egy képkockához is. A sprite-okhoz rendelhető szkripteket gyakran nevezik Behaviornek, esetleg viselkedésnek. Tudni kell, hogy ez nem az ilyen típusú szkriptek kizárólagos neve a Directorban, ugyanis a script és a Behavior kifejezések a Director ezen verzióiban már egymás szinonimái, vagyis minden szkriptet nevezhetünk viselkedésnek is. A korábbi változatokban a különböző elnevezések különböző programtípusokat jelöltek, ez a különbség azóta megszűnt. Mégis: a Behavior szót gyakran az kifejezetten ilyen típusú szkriptek másik elnevezéseként értelmezik. • Szereplőszkriptek (cast member script): ezek a szkriptek nem jelennek meg önálló szereplőként a szereposztásban, hanem egy szereplő részeként kezelhetők. Ez azt jelenti, hogy kizárólag ahhoz a szereplőhöz tartoznak, amelyhez megírjuk őket, a futásuk nem vezérelhető más szereplők, sprite-ok, vagy képkockák által. • Moziszkriptek (movie script): önálló szereplőként megjelennek a szereposztásban, de nem rendelhetők sprite-hoz vagy képkockához. Bármilyen típusú szkriptet is készítünk, úgynevezett eseménykezelőket (handler) kell bennük elhelyeznünk. Ezek olyan alprogramok, amelyek bizonyos események bekövetkezésekor futnak le. Egy eseménykezelőbe írott utasítássorozat akkor kap vezérlést (tehát akkor fut le), amikor vezérlést kap az a szkript, amely tartalmazza, és ezalatt az idő alatt bekövetkezik az az esemény, amelyet az adott eseménykezelő kezelni tud. Mikor kapnak vezérlést a különböző típusú szkriptek? Tudnunk kell először is, hogy az adott szkript mikor kaphat vezérlést, vagyis mikor futhatnak le a bennük található eseménykezelők: • Forgatókönyvszkript: mivel az ilyen szkripteket a forgatókönyv egyes elemeihez (azaz sprite-okhoz) rendeljük, ezek a szkriptek akkor kapnak vezérlést, amikor a lejátszófej áthalad azon a sprite-on vagy képkockán, amelyhez hozzárendeltük őket. Tegyük fel, hogy szeretnénk a 10. képkockán megállítani a lejátszófejet. Ehhez egy képkockaszkriptet (tehát egy bizonyos fajta forgatókönyvszkriptet) kell készítenünk, ami egy önálló szereplő lesz a szereposztásban. Ezt a szereplőt kell elhelyeznünk ezután a szkriptcsatorna 10. képkockáján. Amikor a futtatáskor a lejátszófej a 10. képkockára ér, ez a szkript vezérlést kap. Ekkor a Director megvizsgálja, hogy az adott szkriptben milyen eseménykezelők találhatók. Ha az alatt az idő alatt, amíg a lejátszófej a 10. képkockán tartózkodik, bekövetkezik egy olyan esemény, amelyhez tartozik eseménykezelő ebben a szkriptben, akkor végrehajtódnak az abban az eseménykezelőben leírt utasítások. Vigyázat, ez az időtartam nagyon rövid idő is lehet, alapértelmezés szerint például 1/30 másodperc. Valószínűtlen, hogy egyetlen felhasználó is képes lenne éppen abban az egyharmincad másodpercben kattintani, tehát az egérkattintás kezelését nem célszerű egy képkockaszkriptben megvalósítani – hacsak le nem állítjuk a lejátszófejet abban a kockában. És látni fogjuk a példafeladatokban, hogy egészen gyakori eset, hogy a lejátszófejet bizonyos kockákban megállítjuk. Pontosan azért, hogy a felhasználónak legyen ideje – például kattintani egyet az egérrel. Forgatókönyvszkript nemcsak képkockához, de sprite-hoz is rendelhető. Képzeljük el, hogy egy képnézegetőt kell készítenünk a prezentációnkba. Minden képet külön sprite-ként helyezünk el a forgatókönyvben, és minden sprite-ot külön-külön markerrel (könyvjelzővel) jelölünk. Elegendő 13
egy szkriptet készítenünk, melyben egy eseménykezelő az előző vagy a következő markerre (képre) viszi a lejátszófejet – például a kurzormozgató gombok hatására. Ezt a szkriptet hozzárendelhetjük az összes képhez, ami a képnézegetőben meg fog jelenni. Nem kell minden képhez különkülön szkriptet készítenünk, elég csak egyet, ami univerzális. Ez nemcsak azért jó, mert kevesebb munkánk van vele, hanem azért is, mert ha valamit módosítanunk kell (pl. azt a transitiont, ami a következő vagy az előző képet megjeleníti), azt elég egyetlen helyen megtennünk. • Szereplőszkript: akkor kap vezérlést, amikor azon a sprite-on halad át a lejátszófej, amely azt a szereplőt jeleníti meg, amelyhez a szkriptet megírtuk. Lássunk egy példát! Készítünk egy prezentációt, amelyben a szokásos navigációs gombok találhatók: következő lap, előző lap, vissza a főmenübe, kilépés, stb. Tegyük fel, hogy az egyes lapok külön-külön markerrel rendelkeznek. Képzeljük el, hogy ezeket a gombokat megrajoltuk Adobe Photoshopban, és mindet beimportáltuk a szereposztásba, de minden gombot csak egy példányban. Ezek a gombok a prezentáció teljes működése alatt láthatók és működőképesek. Milyen szkriptet készítsünk hozzájuk? A következő és az előző lapra navigáló gombok működése attól függ, melyik az aktuális oldal. Mivel minden lap saját markert kapott, elvileg működőképes az a megoldás, hogy az előző illetve a következő markerre ugrunk, de mi van, ha a forgatókönyvben a lapok sorrendje nem egyezik meg azok lejátszási sorrendjével? Ilyenkor minden lapnak pontosan kell tudnia, hogy melyik az ő előzője és rákövetkezője. Ezt a feladatot egyszerűbbnek látszik forgatókönyvszkriptekkel megoldani, hiszen az előző és következő gombot minden oldalon el kell helyeznünk, de a gombok egyes példányai attól függően végzik működésüket, hogy éppen melyik lapon vannak elhelyezve. A kilépés, vagy a vissza a főmenübe gombok azonban bárhol is vannak elhelyezve, mindig ugyanazt csinálják, vagyis működésük független a forgatókönyvbeli elhelyezkedésüktől. Esetükben célszerűnek látszik a szereplőszkript alkalmazása: beimportáljuk a gomb képét, majd megírjuk hozzájuk a szereplőszkriptet, végül a szereplőhöz rendelve egyetlen sprite-ot helyezünk el a forgatókönyvbe, ami a prezentáció első kockájától az utolsóig tart. • Moziszkript: az ilyen szkriptek jellemzője, hogy a prezentáció teljes időtartama alatt vezérlést kaphatnak, vagyis azok az eseménykezelők, amelyeket moziszkriptben helyezünk el, mindig lefutnak, ha az adott esemény bekövetkezik – attól függetlenül, hogy a lejátszófej melyik képkocka vagy sprite-ok fölött halad el.
Milyen eseményeket kezelnek az eseménykezelők? A Director számos beépített eseményt kezel, ezekről részletesebben olvashatunk a példafeladatokat bemutató fejezetekben. Felsorolásképpen csak néhány azok közül, amelyeket a prezenetációkban gyakran használni szoktunk: a lejátszófej belép egy képkockára (enterFrame), a lejátszófej kilép egy képkockáról (exitFrame), lenyomjuk az egér bal gombját (mouseDown), felengedjük a lenyomott bal gombot (mouseUp), az egeret egy sprite fölé húzzuk (mouseUp), az egeret lehúzzuk egy sprite fölül (mouseLeave), lenyomunk egy gombot a billentyűzeten (keyDown), felengedünk egy lenyomott gombot a billentyűzeten (keyUp), elkezdődik a mozi futása (startMovie), stb. Ezeket a beépített eseményeket a Director alapértelmezetten tudja kezelni. Az eseménykezelők mindig az on kulcsszóval kezdődnek, ezt követi az esemény neve, illetve az esetleges paraméterek. Az eseménykezelő végét az end kulcsszó jelöli. Például: on mouseLeave utasítások end
14
A Directorban lehetőségünk van saját eseménykezeleőket is készíteni, ezek tulajdonképpen a más programozási nyelvekben megismert alprogramoknak – eljárásoknak és függvényeknek – felelnek meg. Az eljárás olyan utasítássorozat, melynek nevet adunk. Ha szeretnénk ezt az utasítássorozatot végrehajtani, csak a nevét kell leírnunk a hívás helyén. Ezzel a módszerrel az olyan programrészeket, melyeket többször, a program több pontján is használni kívánunk, elegendő csak egyszer megírni. Ezzel időt takaírtunk meg, és a programot is strukturáltabbá tesszük. (Megjegyzés: az eljárás és a függvény között az a fő különbség, hogy a függvény – túl azon, hogy egy meghatározott utasítássorozatot hajt végre – az utasítások végrehajtása után egy visszatérési értéket ad a hívó programrésznek. Az eljárások nem adnak visszatérési értéket.) A saját eseménykezelő megadása ugyanúgy történik, mint a beépített eseményekhez tartozó eseménykezelőké: on eseményNév [paraméterek] utasítások end
A beépítve kezelt események bekövetkezését a rendszer figyeli (tehát pl. ahhoz, hogy a mouseUp eseménykezelő végrehajtódjék, a programozónak nem kell olyan programrészt írnia, ami folyamatosan figyeli az egérről érkező bináris adatokat, mivel a Director megteszi ezt helyette). Ezzel szemben ahhoz, hogy egy a felhasználó által írt eseménykezelő (vagyis eljárás vagy függvény) lefusson, azt egy másik eseménykezelőben meg kell hívnunk: utasításként le kell írnunk a nevét, és mögé az esetleges paramétereket. on mouseUp if pontokSzáma < maxPont then pontszámNövelése end if end on pontszámNövelése pontokSzáma = pontokSzáma + 1 end
A fentiekre sok konkrét példát találhatunk a példafeladatok megoldásainál. Ebben a fejezetben nem szóltunk szkriptekben felhasználható változókkal kapcsolatos tudnivalókról. Ezek ismerete igen fontos a szkriptek készítéséhez, ezért a megfelelő fejezetekben fordítsunk külön figyelmet a megértésükhöz! Szintén nem esett szó a Lingo objektumorientált programozási eszközeiről. Ezekről ebben a jegyzetben nem is lesz szó, de tudjunk róla, hogy a Director rendelkezik valamilyen szinten ezzel a szolgáltatással is.
Összefoglalás A Macromedia Director programozható. A programozáshoz használható a Lingo nyelv, illetve az MX 2004 verziótól a JavaScript is. Egy prezentációban a programokat szkripteknek nevezzük, melyeknek három alaptípusát tárgyalta jelen fejezet. Minden szkriptben esemény15
kezelőket definiálhatunk. Ezek részben a Macromedia Director által rendszerszinten kezelt eseményekhez tartozhatnak, vagy a felhasználó által írott alprogramok lehetnek. Egy szkript tetszőleges számú eseménykezelőt tartalmazhat: on esemény1 utasítások end on esemény2 utasítások end ...
Ahhoz, hogy egy szkript valamely eseménykezelőjében az utasítások lefussanak, két dolognak kell teljesülnie. Egyrészt vezérlést kell kapnia az adott szkriptnek (tehát pl. szereplőszkript esetén az adott szereplőt megjelenítő sprite-nak aktívnak kell lennie, vagyis szerepelnie kell a forgatókönyvben és a lejátszófejnek éppen fölötte kell tartózkodnia), másrészt ezidő alatt az eseménykezelőhöz tartozó eseménynek be kell következnie (pl. a mouseDown eseményhez tartozó eseménykezelő akkor futhat le, ha az adott szkript éppen aktív és az egéren ezidő alatt lenyomjuk a bal gombot).
Készítsük el az első prezentációt! Első prezentációnk igen szerény lesz: Budapest két látnivalóját, a Halászbástyát és a Hősök terét fogja bemutatni. A prezentáció első változatában mellőzni fogunk minden különösebb vizuális effektust. A bemutató indításakor egy egyszerű főmenü jelenik meg, melyen két nyomógomb lesz látható: feliratuk a két helyszín neve. Amikor a felhasználó rákattint valamelyik helyszín nevére, akkor megjelenik az adott helyszín képe és egy rövid leírás róla. A helyszínek leírásának oldalán a Vissza gombbal lehet visszatérni a menübe. A prezentáció alatt háttérzene szól. A prezentációhoz szükséges fájlok a budapest.zip állományban találhatók.
A mozi létrehozása és beállításai Indítsuk el a Macromedia Directort, és zárjuk be az összes szükségtelen ablakot a programon belül: csak a színpad (Stage), a forgatókönyv (Score) és a szereposztás (Cast) ablakai legyenek a képernyőn. Szükségünk lesz az eszköztárra (Tools), valamint a Property Inspectorra is. Ellenőrizzük a Window menüben, hogy ezek be vannak-e kapcsolva! Ha most indítottuk a Directort, akkor egy új üres mozi automatikusan meg lesz nyitva. Ha menet közben új mozit szeretnénk létrehozni, válasszuk a File menü New > Movie menüpontot. Ellenőrizzük, hogy a színpad ablaka-e az aktív. Ha nem, kattintsunk rá egyet! Ekkor a Property Inspectoron (a képernyő jobb szélén álló panelek közül a legfelső) két fül lesz látható, a Guides és a Movie. Kattintsunk a Movie fülre! Állítsuk be a mozi méretét (Stage Size) 640×480-ra, és ellenőrizzük, hogy a háttérszín (Color) fehér (#FFFFFF) legyen! A többi értéket változatlanul hagyhatjuk. 16
A színpad – ha az egészet látni akarjuk a szerkesztés alatt – kényelmetlenül nagy helyet foglalhat el a képernyőn. Célszerű a szerkesztés alatt kisebb méretű nézetet beállítani. Ehhez válasszuk a megfelelő nagyítást (pl. 50%) a színpad ablakának bal alsó sarkában található litamezőből (lásd kép)!
A szereplők importálása Állítsuk be a szereposztást úgy, hogy a szereplők előnézeti képét lássuk! Ehhez kattintsunk a Cast View Style gombra (lásd kép)! Kattintsunk az 1. szereplő helyére az egér jobb gombjával, majd válaszszuk a helyi menüből az Import menüpontot. Nyissuk meg a budapest. zip mappáját (ehhez a letöltött zipet először ki kell bontani), és jelöljük ki a Budapest látnivalói.jpg, a Halászbástya.jpg, a Halászbástya1. jpg, a Hősök tere.jpg, a Hősök tere1.jpg és a háttér2.jpg fájlokat. Ehhez kattintsunk először a Budapest látnivalói.jpg-re, majd nyomva tartva a Ctrl billentyűt, sorban kattintsunk a többi fájlnévre is. (Mindig az a fájl kerül a jobb gombbal kattintott szereplőhelyre, amelyet utoljára jelöltünk ki.)
Miután az összes fájlt kijelöltük, kattintsunk az Import gombra. Ekkor egy párbeszédablak jelenik meg, mely a képek importálásával kapcsolatos információkat tartalmazza, illetve kéri tőlünk: A fenti képek 32 bit színmélységűek, a színpad azonban 24 bites színmélységben kezeli őket. Dönetnünk kell, hogy 32 vagy 24 bites színmélységben akarjuk őket importálni, válaszszuk most a 24 bites lehetőséget! A Trim White Space opció körülvágja a képet, így leveszi róla az esetleges külső, fehér területet és csak a kép hasznos részét importálja be. Ezt az opciót most kapcsoljuk ki! Szeretnénk az összes kijelölt képre ezeket a beállításokat alkalmazni, ezért jelöljük be a Same Settings for Remaining Images opciót – így a Director nem fogja tőlünk újra kérni minden kép esetében ezeket a beállításokat. Az Ok gombbal megtörténik a képek importálása. Ezután importáljuk a 7., 8. és 9. szerplőhelyre a Hősök tere.rtf és a Halászbástya.rtf szövegállományokat, illetve az A day without rain.mp3 című zenét is a fentiekhez hasonló módon. Ezeknél természetesen nem kérdez rá a színmélységre a Director. (Megjegyzés: akár egy lépésben is importálhattuk volna az összes fájlt, függetlneül attól, hogy különböző a fájltípusuk.) 17
A Director egyes verziói néha hibásan kezelik a szöveges fájlokat. Jellemzően az RTF típusú állományokkal szokott gond lenni, az ASCII-állományok – TXT, HTML – rendszerint gond nélkül importálhatók. Ebben a mintafeladatban előfordulhat, hogy a két szövegfájl importálása után a szövegek nemkívánatos karaktereket tartalmaznak (pl. gyakran egy ö betűt legelső karakterként). Ha a szereposztásban duplán kattintunk a szövegeken, a Director szövegszerkesztőjében javítani tudjuk ezeket a hibákat. Ezzel a szövegszerkesztővel nemcsak importált szövegeket tudunk szerkeszteni, de új szöveges szereplőket is létre tudunk hozni. A szövegszerkesztő funkcióinak felfedezését az Olvasóra bízzuk, használata nem különösebben bonyolult. Hasonlóképpen, ha egy képet tartalmazó szereplőre kattintunk a szereposztásban, akkor egy beépített képszerkesztő nyílik meg. Ennek szolgáltatásai kb. a Paint programhoz hasonlók, messze alulmaradnak pl. az Adobe Photoshop lehetőségeitől. Talán egy olyan funkciót említhetünk, melyre ebben a képszerkesztőben időnként szükségünk lehet: a kép regisztrációs pontjának áthelyezése (lásd: jobboldali kép). Az összes fájl beimportálása után a szereposztás az alábbi képen láthatóhoz hasonlóan fog kinézni (a szereplők sorrendje eltérő lehet, de ennek nincs jelentősége).
Figyeljük meg, hogy minden beimportált szereplő automatikusan nevet kapott! A szereplők neve megegyezik az őket tartalmazó fájlok neveivel, de a szereplők nevének végén nincs ott a fájlkiterjesztés. Vegyük észre, hogy emiatt keletkeztek azonos nevű szereplők is (pl. Hősök tere kép és szöveg)! Ez a Director számára nem okoz gondot, nekünk azonban a későbbiekben okozhat, éppen ezért célszerű átnevezni az azonos nevű szereplőket
A prezentáció összeállítása A háttér elhelyezése A háttér2 nevű szereplőt húzzuk a szereposztásból a forgatókönyv 1. csatornájára, az 1. frame-től kezdődően. Így létrejön egy – alapértelmezés szerint – 28 frame hosszúságú sprite 18
a forgatókönyvben, illetve a színpad közepén megjelenik a háttér. Állítsuk ennek a sprite-nak a hosszát 50 frame-re: fogjuk meg az egér bal gombjának nyomvatartása mellett az utolsó képkocát és húzzuk ki az 50. frame-ig. Figyeljük meg, hogy a színpadon ez a kép az egérrel elmozdítható a helyéről (ez minden későbbiekben beimportált vizuális szereplőre igaz lesz). Ha szeretnénk ezt elkerülni, illetve megakadályozni, hogy véletlenül mozdíthassuk el a képet a helyéről a későbbiekben, akkor rögzítsük a képet (a sprite-ot) a Property Inspector segítségével. Kattintsunk a színpadon a képre vagy a forgatókönyvben a sprite közepére, hogy ki legyen jelölve. Kattintsunk ekkor a Property Inspectoron a Sprite fülre, majd ott a kislakatot ábrázoló gombra (Lock), ahogyan az a képen látható. Ugyanitt elvégezhető a sprite helyzetének és méretének beállítása is. Az X és Y koordináták a sprite regisztrációs pontjának koordinátáit jelentik. A W és H (width és height) értékek a sprite szélességét és magasságát pixelben. Ezzel a két értékpárral a sprite helyzete illetve mérete külön-külön beállítható. Ugyanezt a beállítást úgy is megtehetjük, ha elképezljük azt a befoglaló téglalapot, amelyben ez a sprite majd megjelenik a színpadon. Határozzuk meg ennek a befoglaló téglalapnak a bal felső és a jobb alsó sarkát, pontosabban azok koordinátáit a színpadon. Ezzel egy lépésben beállítjuk a sprite helyét és méretét. Ennek a képzeletbeli befoglaló téglalapnak a koordinátáit határozzák meg a középen látható L (left, a bal felső sarok X-koordinátája), T (top, a bal felső sarok Y-koordinátája), R (right, a jobb alsó sarok X-koordinátája), B (bottom, a jobb alsó sarok Y-koordinátája). A feliratok elhelyezése Húzzuk a Budapest látnivalói nevű szereplőt a színpadon a jobb felső sarokba. Igazítsuk úgy, hogy a színpad felső, illetve jobb szélétől kb. 5-10 pixel távolságra legyen a kép. Két dolgot kell észrevennünk! Az egyik, hogy a kép háttere fehér, ami kitakarja a háttérkép azonos nagyságú részét. Ahhoz, hogy ez a takarás megszűnjön, állítsuk a felirat hátterét átlátszóvá: a Property Inspector Sprite fülére kattintva az Ink tulajdonságot állítsuk Transparentre. A Background Transparent azért nem elég, mert azáltal a képen csak a teljesen fehér (#FFFFFF) színű pontok lesznek átlátszók. A képen azonban a szövegnek vetett árnyéka van, ami körül a háttér világosszürkéből fehér színátmenetű, és azt nem tudja átlátszóvá tenni a Director. A Transparent érték ezt megoldja. A másik fontos dolog, hogy ez a sprite esetleg „rossz” helyre került a forgatókönyvben. Mivel nem akartuk, hogy a felirat a színpad közepén jelenjen meg, nem a forgatókönyvbe húztuk a szereplők közül, hanem egyenesen a színpadra. Ilyenkor a sprite a forgatókönyv első üres csatornájára kerül, az első frame-je pedig ott lesz, ahol a lejátszófej éppen áll. Semmi gond: bárhol is van éppen most, fogjuk meg a sprite-ot, és húzzuk át a forgatókönyv 2. csatornájának 1. frame-jéhez. A hosszát állítsuk 50 frame-re, mint a háttérképét. (Ha szükségesnek tartjuk, ezt is rögzíthetjük a kislakattal.) Helyezzük a színpadra a Hősök tere1 és a Halászbástya1 szereplőket. Legyenek a színpad bal szélétől 5-10 pixelre, függőlegesen nagyjából a színpad közepén, vagy alsó felének tetején. Tegyük őket is átlátszóvá! A sprite-jaik legyenek 15 frame hosszúak, első frame-jüket állítsuk a forgatókönyv első kockájára, és helyezzük őket a 3. és 4. csatornára, ha nem ott lennének! 19
A minimális esztétikai követelményeknek akkor felelünk meg, ha a két gomb bal széle egyvonalba esik. Ez megoldható a Property Inspectoron, ha a két gomb L értékét azonosra álítjuk, és a többit nem változtatjuk meg, vagy az Align paletta használatával, amit a Window menüből vagy a Ctlr+K kombinációval kapcsolhatunk be. Ha a palettát bekapcsoltuk (valószínűleg a Property Inspector alatt lesz valahol a képernyő jobb szélén), akkor jelöljük ki egyszerre a két felirat sprite-ját a színpadon vagy a forgatókönyvben (Shift és kattintás az egérrel), majd használjuk az Align palettán a Left edge gombot (lásd kép)! Eddigi munkánk eredménye nagyjából ez lesz:
Hogy áttekinthetőbb legyen a kép, a jobboldali palettákat elrejtettük Ideje mentenünk az eddigieket (File > Save as...). Ha mentettünk, indítsuk el a prezentációt! Ehhez használhatjuk a színpad ablakának alján található vezérlőgombokat, vagy a Director képernyőjén a menüsor alatt középtájon elhelyezkedő vezérlőgombokat, esetleg bekapcsolhatjuk a Window menüben a Control Panelt. Mindegy, mit választunk, nyomjuk meg a (Play) gombot! A prezentáció a színpad ablakában futni kezd. Ha szeretnénk teljes képernyőn futtatni a prezentációt, nyomjuk meg egyszerre a Shift és a numerikus billentyűzeten található Enter-t. (A másik, a „rendes” Enter nem jó!) Esetleg indítsuk el a prezentációk a gombbal, majd a View menüben válasszuk a Full Screen menüpontot (notebookokon ez lesz a nyerő megoldás, mivel azokon nem szokott külön numerikus billentyűzet lenni). Megállítani a (Stop) gombbal vagy az Esc billentyűvel tudjuk. Akárhogy is futtatjuk a programot, észre fogjuk venni, hogy a két helyszín felirata „villogni” fog, azaz egy ideig láthatók lesznek, aztán egy időre eltűnnek, és ez ismétlődik. Ennek az 20
az oka, hogy a két helyszín feliratának sprite-jai rövidebbek, mint a másik két sprite. Ha nem teljes képernyő futtatjuk a prezentációt, akkor a lejátszófej mozgását figyelve jól látható lesz, hogy mikor – és miért – tűnik el a két helyszín felirata. Állítsuk meg a lejátszófejet! Szeretnénk, ha a lejátszófej megállna a 15. frame-en, amikor odaér. Ehhez egy nagyon egyszerű szkriptet kell készítenünk. Ez a szkript egy forgatókönyszkript lesz, egészen pontosan egy képkockaszkript. A létrehozásához kattintsunk duplán a szkriptcsatorna 15. kockáján (oda, ahol a képen az egérmutató éppen áll)! Ekkor megnyílik a szkriptablak, melynek fejlécében látni fogjuk, hogy most egy Behaviort hozunk létre a szereposztás 10. szereplőjeként (lehet, hogy ez a szám nem mindenkinél a 10. lesz, attól függően, hogy ki hány szereplőt importált be). Az ablak szerkesztőterületén pedig el is készült az első szkriptünk egy része. Ez jelenleg egyetlen eseménykezelőt tartalmaz, amely az exitFrame eseményt figyeli. Az exitFrame esemény akkor következik be, amikor a lejátszófej éppen tovább akar lépni arról a képkockáról, amihez ezt a szkriptet rendeltük. Tiltsuk ezt meg neki! (Figyeljük meg, hogy eközben létrejött egy új szereplő 10. sorszámmal!) A szkriptekben a lejátszófejet a go to képkocka paranccsal vezérelhetjük, ahol a képkocka lehet egy frame sorszáma a forgatókönyvben, vagy ha rendeltünk markert ehhez a képkockához, akkor annak a markernek a neve. Ez esetben a marker nevét idézőjelek közé kell zárnunk: go to "főmenü". (Megjegyzés: a parancs írható go to frame képkocka formában is, vagyis a frame kulcsszó redundánsan kiírható.) Logikusnak látszik, hogy akkor ide a go to 15 vagy go to frame 15 utasítást kellene írnunk, ezzel megálítanánk a lejátszófejet, ami épp a 15. kockán van, amikor ez a szkript lefut. (Az exitFrame esemény ugyanis még azelőtt bekövetkezik, hogy a lejátszófej elhagyná az adott képkockát.) Legyünk azonban előrelátók, és gondoljunk arra, hogy a prezentációban további két helyen lesz szükséges még a lejátszófej megállítása. Hamarosan létrehozzuk a prezentációnak azokat a részeit is, ahol a két helyszín képe és leírása lesz látható, és ahhoz, hogy a szöveget el lehessen olvasni, a lejátszófejet ezeket a helyeken is meg kell állítanunk. Készítsünk olyan szkriptet, ami újrafelhasználható lesz. Más szóval: ne készítsünk három majdnem teljesen azonos szkriptet, amik csak a képkockák sorszámában térnek el, hanem készítsünk egyetlen olyat, amely mindig az aktuális kockán állítja meg a lejátszófejet. A megoldás kulcsa a the frame kifejezés. A the frame egy rendszertulajdonság. A rendszertulajdonság (System property) olyan szimbólum, aminek a Director ad értéket, bár léteznek olyan rendszertulajdonságok is, melyek értékét épp a felhasználónak kell megadnia (ilyen pl. a the floatingPrecision). A rendszertulajdonságok mindig a the kulcsszóval kezdődnek. A the frame rendszertulajdonság az aktuális képkocka sorszámát tárolja. Ahogy halad a lejátszófej, ennek a rendszertulajdonságnak az értéke automatikusan változik. Ha a lejátszófejet a go to the frame kifejezéssel vezéreljük, akkor gyakorlatilag azt mondjuk a Directornak, hogy vigye arra a kockára a lejátszófejet, amelyiken az éppen most tartózkodik. Ha ezt az exitFrame eseményhez rendeljük, akkor a Director megállítja a lejátszófej mozgását, hiszen mielőtt az kiléphetne az aktuális kockából, visszaugrik ugyanarra. Jogosan érezheti kicsit nyakatekertnek ezt a gondolkodásmódot az Olvasó, de ez a megoldás. 21
Írjuk be a szkriptablakba most ezt az utasítást, majd zárjuk be a szkriptablakot!
Vigyük a lejátszófejet az 1. képkockára, majd indítsuk újra a lejátszást! Figyeljük meg, hogy mostmár nem „villognak” a feliratok, hiszen a lejátszófej megáll a 15. képkockán. Korábban szó esett a markerek jelentőségéről. Ez a prezentáció nem túl bonyolult, mindössze 50 frame hosszú a forgatókönyve – és lehetne ennél is rövidebb –, nem okoz gondot az áttekintése, sem a képkockák sorszámának fejben tartása. Mégis, hogy kihasználjuk ezt a lehetőséget is, most rendeljük az 1. képkockához a Menü nevet! Kattintsunk az 1. frame fölött a markerek sávján. A létrejövő új markert nevezzük át! A helyszínekhez tartozó oldalak elkészítése Készítsük el először a Halászbástyát bemutató oldalt! Először is, ha még fut a prezentációnk, akkor állítsuk le. Most vigyük a lejátszófejet a 20. frame-re, hogy a most a forgatókönyvbe kerülő sprite-ok a 20. frame-től kezdődjenek. Ezután a Halászbástya nevű (kép)szereplőt húzzuk a színpadra úgy, hogy a színpad bal felét takarja. Ehhez a képet át kell méretezni, mivel az nagyobb, mint amekkora hely a rendelkezésére átt. Miután a képet a színpadra húztuk, a szípnadon megjelenő sprite sarkain és oldalfelezőin látható méretezőnégyzetekkel kicsinyítsük a kívánt méretűre. Ha méretezés közben nyomjuk a Shift gombot, a méretezés 22
aránytartó lesz. Ha a kép a helyére került, húzzuk mellé a Halászbástya nevű szöveges szereplőt. Ha a szöveg doboza kilóg a színpadról, méretezzük át azt! A Director a szövegdobozokat háromféle módon tudja méretezni. Ha kijelöltük a beállítani kívánt szövegdoboz sprite-ját, kattintsunk a Property Inspector Text fülére, és keressük a Framing listamezőt! Ha itt az Adjust to fit érték szerepel, akkor a kijelölt szövegdoboz szélességének változtatására annak magassága úgy változik meg automatikusan, hogy a szöveg teljes hosszában elférjen benne (még akkor is, ha így kilóg a színpadról). Ha a Scrolling értéket választjuk, akkor a dobozban megjelenik egy függőleges gördítősáv, és az akkor is ott lesz, ha nincs rá szükség. A doboz magasságát viszont teszőlegesen kicsire állíthatjuk análkül, hogy a szélességét változtatnunk kellene. A harmadik lehetőség a Fixed érték választása. Ha emellett döntünk, tetszőleges méretűre állíthatjuk a szövegdobozt, még akkor is, ha a szövegnek egy része így láthatatlanná válik. Miután átméreteztük a Halászbástya képét szövegének dobozát, győződjünk meg róla, hogy a sprite-jaik a forgatókönyv 3. és 4. csatornáján helyezkednek el, és mindkettő sprite a 20. frame-en kezdődik. Nevezzük el a 20. frame-et Halászbástya markernévvel, majd a két sprite végét húzzuk vissza a 30. frame-re. Hasonlóképpen járjunk el a Hősök tere helyszínnel. A 40. frame-től helyezzük a 3. és 4. csatornára a képet és a szöveget, méretezzük őket a kívánt nagyságúra, majd a sprite-ok végét húzzuk vissza az 50. frame-re a forgatókönyvben. Ezután rendeljük a Hősök tere markernevet a 40. frame-re. Mint látható, a Menü, a Halászbástya és a Hősök tere „képernyők” között a forgatókönyvben térközöket hagytunk. Ez célszerű, mert így a forgatókönyv áttekinthetőbb lesz – azonban egyáltalán nem szükséges. A Director részéről annak sincs akadálya, ha minden képernyő csupán egyetlen frame hosszúságú, de a számunkra mindenképpen szerencsésebb, ha a sprite-ok feliratai olvashatók a forgatókönyvben, vagyis elegendően hosszúak ahhoz, hogy el tudjuk olvasni, melyik szereplőt jelenítik meg.
23
Tegyük interaktívvá a prezentációt! Ha újraindítjuk a mozit, a két helyszín oldala egyelőre nem látható, hiszen a lejátszás a 15. képkockán megáll. Legyen a következő feladatunk az, hogy a két helyszín nevét mutató feliratot interaktívvá tesszük: ha a felhasználó rájuk kattint, a lejátszófej a megfelelő helyszín oldalára ugrik. A feladatot most szereplőszkriptekkel oldjuk meg! A 15. frame-re létrehozott képkockaszkript önálló szereplőként jött létre a szereposztásban. Ha mindent a leírtak szerint csináltunk eddig, akkor ez a szkript a 10. helyen van a szereplők között. Az ilyen típusú szkriptek ikonja a szereposztásban egy kis sárga színű fogaskerék. A most elkészítendő szkripteknek nem kell önálló szereplőként megjelennie, hanem már létező szereplők részeként készítjük el őket. (Ezeket nem hozzárendeljük a szereplőkhöz, hanem beleírjuk a szereplőkbe. Ez az állítás nem teljesen igaz, de talán elég szemléletes a különbség megértéséhez.) Kezdjük a Halászbástyával! Kattintsunk a szereplők között a Halászbástya1 nevű szereplőn (ez a Halászbástya feliratot mutató szereplő). Ha kijelöltük, kattintsunk rá most az egér jobb gombjával, majd a helyi menüből válasszuk a Cast member script menüpontot! Újra megjelenik a szkripteditor, de a fejlécére nézve láthatjuk, hogy most nem behavior készül, hanem egy cast member script. Láthatjuk továbbá, hogy nem az exitFrame eseménykezelő váza készült el a szerkesztőben, ami logikus is. Most nem egy képkockához rendelt szkriptet írunk, hanem egy a képernyőn megjelenő sprite-hoz. Ezen nem értelmezhető az exitFrame esemény, hiszen az csak egy képkockán következhet be, egy sprite-on (pl. képen vagy szövegen) nem. Egy képernyőn elhelyezett sprite-on viszont történhet az, hogy rákattintunk az egérrel, sőt, ez elég gyakran be is következik. Éppen ezért a cast member scriptek esetében az alapértelmezett eseménykezelő a mouseUp lesz, ami akkor következik be, amikor az adott szereplő fölött állva az egérrel a lenyomott bal gombot felengedjük. (Eszerint a kattintás akkor következik be, amikor elengedjük a bal gombot, nem pedig akkor, amikor lenyomjuk azt.) Mi történjen, amikor a képenyőn éppen látszik a Halászbástya felirat, és a felhasználó rákattint? Nyilván az, hogy jelenjen meg a hozzá tartozó képernyő – azaz ugorjon a lejátszófej arra a képkockára, amit Halászbástya markernévvel jelöltünk meg. Ehhez írjuk meg a szükséges eseménykezelőt: on mouseUp go to frame "Halászbástya" end
Vigyázat! Sokszor elkövetett hiba, hogy összekeverik a go to the frame és a go to frame képkocka utasításokat, és létrehozzák belőle az értelmetlen go to the frame képkocka utasítást. A frame 10 a 10. kockát jelenti, a the frame pedig az éppen aktuálisat. Nincs értelme a the frame 10 kifejezésnek, tehát véletlenül se írjuk a fenti szkriptbe helyére ezt az utasítást: go to the frame "Halászbástya"! (Ha mégis, akkor a prezentáció nem fog futni, hanem hibaüzenetet ad a Director.) Hasonlóképpen járjunk el a Hősök tere helyszínével is. Figyeljük meg, hogy létrehozott két szkript nem fog új szereplőként megjelenni a szereposztásban, de a két szkripttel felruházott szereplő új ikonokat kap: a szereplők előnézeti képének bal alsó sarkában egy papírlap jelenik meg (lásd kép). Mentsünk munkánkat, majd a lejátszófejet az első képkockára mozgatva indítsuk el újra a bemutatót. A főmenüben a Halászbástya gombra kattintva rövid ideig a Halászbástya oldala lesz látható, aztán egy pillanatra semmi, majd hamarosan a Hősök tere, végül újra a főmenü. Mi lehet a baj? 24
Utolsó simítások Amikor kattintunk a Halászbástya gombon, lefut a Halászbástya szereplőhöz tartozó szereplőszkriptben a mouseUp eseménykezelő: a lejátszófej a Halászbástya markernevű képkockára ugrik. Onnan viszont nincs, ami megállítaná: miután megjelent 10 frame időtartamra a Halászbástya oldala, 9 frame-en keresztül csak a hátteret látjuk, majd a lejátszófej továbbhaladásával sorrakerül a Hősök tere oldala is. Miután a lejátszófej az 50. frame-re ért, a Director észleli, hogy a további képkockákon már nincs egyetlen sprite sem, vagyis a bemutató véget ért. Mivel a vezérlőpulton az az alapértelmezett beállítás, hogy ilyenkor a prezentáció újraindul, most ez történik. A lejátszófej csak akkor áll meg ismét, amikor a újra a 15. képkockhoz ér. A megoldás: állítsuk meg a Halászbástya és a Hősök tere oldalak végén is a lejátszófejet! Ehhez nincs más dolgunk, mint a 10. szereplőt (vagy ha nem 10-es a sorszáma, akkor azt, amelyikben az on exitFrame eseménkezelő látható) húzzuk a szkriptcsatorna 30. és 50. képkockájára. Nem kell új szkriptet írnunk, hiszen a 10. szereplőbe írott szkript univerzális: bárhol is van most a lejátszófej, azon a képkockán megállítjuk.
Ha most elindítjuk a prezentációt, azt vesszük észre, hogy amint valamelyik menüpontot kiválasztjuk, arról a képernyőről nincs tovább út. Vissza kellene térnünk valamilyen módon a főmenübe. Ehhez nincs külön gomb készítve a letölthető zip-ben, használhatunk egy Director-beli nyomógombot, esetleg készíthetünk a Photoshoppal egy sajátot. Kattintsunk a 11. szereplőhelyre, és importáljuk be a saját Vissza gombot, majd helyezzük a színpad jobb alsó sarkába, vagy kattintsunk a Director eszköztárán a nyomógomb eszközre, és rajzoljunk egy nyomógombot a színpadon. Ez utóbbi esetben a nyomógomb felirata legyen Vissza. Ne lepődjünk meg, ha a gomb túl nagy méretű: amíg a feliratát szerkesztjük, a Director teljes méretben fogja mutatni a gombot. Miután ezt befejezzük, a gomb normális méretű lesz. 25
A Vissza gomb sprite-ját helyezzük a forgatókönyv 5. csatornájára, első frame-je legyen a 20. frame-en (vagyis a Halászbástya markerrel egy vonalban), az utolsó frame-jét pedig húzzuk az 50. képkockára!
Ha készen vagyunk, jobb gombbal kattuntsunk a 11. szereplőn, majd a helyi menüből válasszuk a Cast member script menüpontot. Rendeljük a Vissza gombhoz a következő eseménykezelőt: on mouseUp go to frame "Menü" end
A háttérzene és a vizuális effektusok beállításai A háttérzene beszúrása nagyon egyszerű: húzzuk a szereposztásból a zenei szereplőt (A day without rain) valamelyik zenecsatornára a kettő közül. Ehhez először láthatóvá kell tennünk az effektuscsatornákat (jobb gombbal kattintsunk a szkriptcsatorna ikonján, majd a helyi menüből válasszuk az Effects Channels menüpontot). A zenesprite első frame-je legyen az 1. képkockán, az utolsó pedig az 50. frame-en. Állítsunk be azonos vizuális effektust (Transition) a három képernyő (Menü, Hősök tere, Halászbástya) megjelenésekor. Ehhez létre kell hoznunk egy effektust, egyszer kell beállítaniunk a tulajdonságait, majd mindhárom markerrel jelölt képkockához hozzá kell rendelnünk. Kattintsunk duplán a Transition csatorna 1. képkockáján. A megjelenő párbeszédablakon válasszunk egy effektust (pl. a Dissolve-ot – az effektusok felfedezését az Olvasóra bízzuk), majd állítsuk be sebességét és finomságát. Figyeljük meg, hogy új szereplőként létrejön egy Transition típusú szereplő. Ezt a szereplőt azután húzzuk a Transition csatorna 20. és 40. képkockájához is! A vizuális effektusokról a Transitionökről szóló fejezetben részletesebben szólunk.
A prezentáció publikálása Projector készítése Projector készítéséhez nem szükséges megnyitni a DIR fájlt. Ha éppen szerkesztünk egy mozit, projector készítésénél akkor is meg kell mondanunk, melyik Director-moziból ké26
szüljön a vetítő, ha éppen a szerkesztett mozi az. Más szóval: projectort csak elmentett állományból tudunk készíteni, megnyitnunk azonban nem muszáj. Válasszuk a File > Crate projector menüpontot. A megjelenő párbeszédablakban válaszszuk ki azt a DIR kiterjesztésű mozifájlt, amelyből a projectort készítjük, majd nyomjuk meg a Create gombot. Második lépésben nevet kell adnunk a projectornak. Esetünkben ez a név legyen a Budapest látnivalói. A mentés végén létrejön a Budapest látnivalói.exe fájl, amit ezután bármilyen gépen tudunk futtatni (amin Windows operációs rendszer fut), a futtatáshoz nincs szükség a Macromedia Directorra. Shockwave-állomány készítése Ez a fájltípus HTML-oldalakba ágyazható, vagyis weblapokba építhető. Amikor ilyen fájlt készítünk (a kiterjesztés DCR lesz), létrejön egy HTML-fájl is, amely tartalmazza azt a kódot, amely elindítja a fájl lejátszásához szükséges playert (a Shockwave Playert), illetve szükség esetén – a felhasználó kérésére – telepíti azt. Először válasszuk a File > Publish Settings... menüpontot. Itt adjuk meg a létrehozni kívánt HTML- és DCR-fájl nevét és elérési útját. (A többi beállítás értelemzését az Olvasóra bízzuk.) Ezután válasszuk a File > Publish menüpontot. A Shockwave-állomány abból a moziból jön létre, amit éppen szerkesztünk. Ha az utolsó módosítás óta nem mentettünk, a Director kérni fogja ezt a DCR létrehozása előtt. Miután megtörtént a mentés, létrejön a DCR-fájl, majd a HTML, ezután elindul a gépen alapértelmezett böngészőprogram és be is töltődik ez a HTML. Ha a böngészőben tiltva van az ActiveX-parancsfájlok végrehajtása, akkor ezt először (ideiglenesen vagy végérvényesen) engedélyeznünk kell, majd ha van Shockwave Player telepítve a gépünkre, a böngészőben megjelenik a prezentáció. Ha nincs, akkor a böngészőben automatikusan elindul ennek telepítése.
27
Kulcsképkockák alkalmazása Kulcsképkockákat (Keyframe) akkor alkalmazunk, ha szeretnénk prezentációinkat dinamikussá tenni. Ez jelentheti azt, hogy a képernyőn mozgatjuk a sprite-okat, vagy forgatjuk azokat, esetleg dinamikusan változtatjuk méretüket, stb. Sok olyan effektus megoldható kulcsképkockák alkalmazásával, amelyek transitionökkel – esetleg más módon – nem, vagy csak nehezen. A prezentációhoz szükséges fájlok ismét a budapest.zip állományban találhatók.
Elhalványodik a háttérkép Nyissunk új mozit, mérete legyen 640×480 pixel, a háttérszín legyen fehér. Importáljuk be a budapest.zip-ből a háttér1.jpg, a háttér2.jpg, a Budapest látnivalói.jpg, a Hősök tere1.jpg és a Halászbástya1.jpg fájlokat. Ismét elkészítjük az előző prezentáció főmenüjét, de most néhány képernyőeffektus alkalmazásávál, melyeket kulcsképkockákkal valósítunk meg. Húzzuk a háttér1.jpg képet a forgatókönyv első csatornájára, első frame-je legyen az első képkockán. A sprite hossza legyen 30 frame! Ez a kép ugyanaz, mint a háttér2.jpg, a különbség annyi, hogy a háttér2.jpg ennél jóval halványabb (világossági értéke a háttér1. jpg világosságának 20%-a). Szeretnénk, ha a prezentáció úgy kezdődne, hogy ez a kép jelenne meg nyitóképként. 2 másodpercig ez a nyitókép lesz láthetó, majd további 1 másodperc alatt a kép elhalványodik. (Azért 30 frame hosszú a sprite, mert ha a lejátszófej alapértelmezett sebességgel – 30 frmae/sec – halad, ezt a hosszúságot épp 1 másodperc alatt teszi meg.) Először a Timer csatornán az első frame-re helyezzünk el egy olyan sprite-ot, ami 2 másodpercre felfüggeszti a prezentáció futását! Ha nem látszanak az effektuscsatornák, tegyük őket láthatóvá, majd a Timer csatorna 1. képkockáján kattintsunk duplán.
Kattintsunk dulpán a Timer csatorna első képkockáján, majd válasszuk a Wait rádiógombot, és állítsunk be 2 másodperces időtartamot! Szúrjunk be most kulcsképkockát a sprite utolsó frame-jére. Ehhez kattintsunk a sprite legutolsó frame-jére az egér jobb gombjával, majd a helyi menüből válasszuk az Insert keyframe menüpontot. Figyeljük meg, hogy a sprite utolsó képkockájában egy ugyanolyan kör jelenik meg, mint az első képkocka. A kulcsképkockákat a Director ilyen fehér színű körrel jelöli. 28
Egy sprite első képkockája automatikusan mindig kulcsképkocka. Az ilyen kulcsképkockán megadott sprite-tulajdonságok (méret, pozíció, világosság, stb.) lesznek érvényesek a sprite további kockáira, kivéve, ha a sprite valamelyik következő képkockája ismét kulcsképkocka. Ha újabb kulcsképkockát szúrunk be a sprite valamely kockájára, a Director megvizsgálja, melyik tulajdonság (vagy mely tulajdságok) változik (változnak) meg a két kulcsképkocka között. Ezután a két kulcsképkocka tulajdonságai között minden képkockán egyenletesen változtatja meg a tulajdonság-értékeket. Lássunk egy példát! Szeretnénk, ha a háttérkép fokozatosan elhalványodna. A háttér1.jpg sprite-jának 30. frame-je most kulcsképkocka lett. Amíg a lejátszófej ezt a képkockát jelöli ki, a Property Inspectoron a Sprite fülön állítsuk be az Ink tulajdonság melletti Copy értéket 20%-ra. Amikor egy sprite-ot beszúrunk, ez az érték minden képkockáján alapértelmezetten 100%. Az első képkocka kulcsképkocka, és azon nem változtattuk meg ezt az értéket. Az utolsó kockát kulcsképkockává alakítottuk, és azon beállítottuk, hogy ez az érték legyen 20%. Amikor a prezentációt lejátsszuk, a Director minden képkockán annyival fogja módosítani a világosság értékét, hogy mire az első frame-ről a 30.-ra ér a lejátszófej, az 100%-ról pontosan 20%-ra csökkenjen.
Figyeljük meg, hogy az utolsó képkocka kulcsképkocka, és ennek Ink tulajdonságán módosítottunk Futtassuk a bemutatót! Megjelenik a háttérkép, ami 2 másodpercig látható is marad. Ezután 1 másoperc alatt elhalványodik a kép, majd minden kezdődik az elejéről (hiszen nem állítjuk meg a lejátszófejet a 30. frame-en). Mentsük most el eddigi munkánkat. A következő lépés az lesz, hogy a három feliratot a színpadra gördítjük: a Budapest látnivalói szöveget jobbról, a két helyszín nevét pedig balról. 29
Kulcsképkockát tartalmazó sprite-ok hosszának módosítása Miután a háttérkép elhalványult, rögzítjük ezt a világossági fokot, vagyis ez a világos változat lesz a továbbiakban a háttérkép, hasonlóan az előző gyakorlathoz. Ezt megoldhatjuk úgy, hogy az első spritecsatornára húzzuk a 31. frame-től kezdve a háttér2.jpg-t tartalmazó szereplőt. Egy másik lehetőség, hogy a háttér1 sprite-jának utolsó frame-jét húzzuk a forgatókönyvben, mondjuk a 60. frame-ig. Ezzel az a probléma, hogy az utolsó képkocka egyben kulcsképkocka is. Ha azt húzzuk a 30. frame-ről a 60.-ra, akkor annyit érünk el, hogy a halványodás nem 1, hanem 2 másodpercig fog tartani, és ez most nyilván nem jó megoldás. Azt kellene elérnünk, hogy a 30. frame-en maradjon ott a kulcsképkocka, és a sprite hossza bővüljön újabb frame-ekkel, melyeken a világosság értéke ugyanakkora marad. mint a 30. kockán (20%). Ehhez úgy kell az egérrel húzni a sprite utolsó képkockáját, hogy közben nyomjuk az Alt billentyűt. Nyújtsuk meg így a sprite-ot a 60. frame-ig!
Miközben húzzuk az utolsó képkockát, a billentyűzeten tartsuk nyomva az Alt gombot! Megjegyzés: időnként arra is szükségünk lehet, hogy egy sprite hosszát úgy módosítsuk, hogy a sprite belsejében szereplő kulcsképkockák a helyükön maradjanak. Ha az ilyen sprite utolsó kockájának helyét hagyományos módszerrel módosítjuk a forgatókönyvben (az utolsó kockát húzzuk az egérrel), akkor a közbenső kulcsképkockák helye is változni fog a sprite hosszának változásával arányosan. Hogy ezt elkerüljük, a sprite nyújtásának/zsugorírásának ideje alatt tartsuk nyomva a Ctrl billentyűt!
Sprite-ok mozgatása a színpadon A forgatóköny 2. sprite-csatornájának 30. framejétől a 60. frame-ig helyezzük el a Budatartalmazó szereplőt. Hasonlóképpen húzzuk a Hősök tere1 és a Halászbástya1 szereplőket is a forgatókönyvbe a 3. és 4. csatorna 30–60 frame-je közé. Futtatáskor a feliratoknak be kell gördülniük a színpadra, ezért a Budapest látnivalói szöveget húzzuk a színpad tetejéhez, de húzzuk ki azt a színpad melletti jobboldali takarásba. Hasonlóképpen járjunk el a másik két felirattal, de azokat a bal oldali takarásba húzzuk. A feliratoknak tehát a színpad hasznos területén kívülről kell indulnia, és oda kell megérkeznie, ahol az előző prezentációban voltak a menü képernyőjén. (A feliratok legyenek átlátszóak!) A feliratok mozgását szintén 1 másodpercesre tervezzük, ezért lettek 30 frame hosszúságúak. (Valójában 31, de az 1/30 másodperces időtöbblet nem lesz érzékelhető.)
pest látnivalói.jpg-t
30
A feliratok a színpadon kívülről indulnak. Az utolsó képkockák most még nem kulcsképkockák! Mozgassuk elsőként a Budapest látnivalói feliratot! Kattintsunk sprite-ja utolsó képkockájára, majd tegyük azt kulcsképkockává (jobb gomb, Insert keyframe). Ezután fogjuk meg a sprite-ot a színpad ablakában, és az egérrel húzzuk be a színpadra! Ha szeretnénk, hogy garantáltan vízszntesen mozogjon, akkor miután megfogtuk az egér bal gombjával, nyomjuk le és tartsuk nyomva a Shift billentyűt, és így húzzuk be a színpadra. Hasonló módon húzzuk a színpad bal szélére a két helyszín feliratát is! Amint az az alábbi képen látható, a majdani mozgást a Director a színpadon a mozgás pályájának jelölésével mutatja (mintha a sprite mozgása ezen a „sínen” történne).
A „sín” a sprite regisztrációs pontjának majdani útját mutatja Mentsük és futtassuk munkánkat! 31
Sprite-ok nagyítása, forgatása, megdöntése A Property Inspector bármely sprite-tulajdonságát módosíthatjuk kulcsképkockás animációkban. Kísérletezzünk a nagyság (W, H), az elforgatás (Rotation), és a döntés (Skew) értékeinek megváltoztatásával!
Animáció Kulcsképkockák alkalmazásával egy sprite mozgatható, forgatható stb. a színpadon, valódi animációk létrehozásához ez azonban kevés. Most lássunk néhány módszert valódi animációk készítéséhez! Hozzunk létre egy új, üres, 640×480-as méretű mozit! A prezentációhoz szükséges fájlok az animacio.zip állományban találhatók.
Filmciklus készítése Ha állóképként rendelkezünk egy animációs mozdulatsor összes elemével, az állóképekből létre tudunk hozni egy új szereplőt. Az ilyen szereplőt nevezi a Director filmciklusnak (Film loop). A filmciklus típusú szereplők hasonlóképpen használhatók sprite-ként a színpadon, mint egy állókép, néhány tulajdonság megváltoztatása lehetőségének kivételével. Importáljuk be az animacio.zip állományból – melyet először természetesen ki kell csomagolnunk – az 1.bmp – 6.bmp (összesen hat darab állókép) fájlokat! Lehetőség szerint jó sorrendben legyenek (1, 2, 3, stb.) a szereplők a szereposztásban! Húzzuk az 1. szereplőt a forgatókönyvbe, sprite-jának hossza legyen 6 frame (mivel hat állóképből hozzuk létre a filmciklust)! Ezt a hatképkockás sprite-ot fel kell bontanunk 6 önálló képkockává úgy, hogy a sprite ettől függetlenül egyben maradjon. Ehhez kattintsunk jobb gombbal a sprite-on, majd válasszuk a helyi menüből az Edit Sprite Frames menüpontot! A sprite 2. kockája helyére be kell cserélnünk a szereposztás 2. szereplőjét, a 3. helyére a 3. szereplőt és így tovább. Kattintsunk a sprite második kockájára, majd a szereposztás 2. szereplőjére. A Director ablakának felső részén a menüsor alatti eszköztáron keressük meg az Exchange Cast Members gombot, és nyomjuk meg! Kattintsunk a forgatókönyvben a sprite 3. kockáján, jelöljük ki a szereposztás 3. szereplőjét, majd ismét nyomjuk meg az Exchange Cast Members gombot. Ismételjük ezeket a lépéseket a maradék három képkockán is!
A második kockán kicseréljük a sprite eredeti szereplőjét a 2. szereplőre 32
Miután minden képkockát kicseréltük a megfelelő sorszámú szereplőre, jelöljük ki a sprite mind a hat képkockáját: kattintsunk a csatorna sorszámát tartalmazó területen a csatorna elején! Ezután másoljuk vágólapra a kijelölt kockákat: Ctrl+C! A következő lépésként kattintsunk a szereposztás egy üres szereplőhelyén (pl. a 7.-en), majd illesszük be oda a vágólapról a képkockákat: Ctrl+V. Vegyünk észre egy nagyon fontos momentumot: a forgatókönyvből másoltuk ki a kockákat, de a szereposztásba illesztettük be őket! Ha mindent a leírtak szerint csináltunk, a Director egy kisméretű ablakkal jelzi, hogy most filmciklus készül, és kéri, hogy adjunk nevet az újonnan létrejövő szereplőnek. Miután ez megtörtént, létrejön az új szereplő. Gyakorlásképpen mozgassuk őt végig a színpad alján a színpad jobb szélétől a bal széléig. Ezután készítsünk olyan animációt, ahol az emberke a színpad jobb alsó sarkától indulva körbesétál a színpadon! Amint új irányba indul, mindig forgassuk el 90°-kal!
Animált GIF felhasználása Animáció készítése animált GIF-ek beimportálásával is történhet. Ez elég kézenfekvő dolognak tűnik, van azonban egy elég komoly hátránya a filmciklusokkal szemben. Filmciklus bármilyen állóképből készülhet, az animált GIF-ek színmélysége egyidejűleg azonban maximum 256 szín használatát teszi csak lehetővé. Az animált GIF-ek importálása és felhasználása ugyanúgy történik, mint az állóképeknél. Egy fontos különbség, hogy importáláskor a Directort tájékoztatnunk kell, hogy a beimportálni kívánt fájlt animációként kívánjuk használni, ezért animált GIF-ként és ne állóképként importálja be. (Utóbbi esetben az eredeti animált GIF első képkockája lesz a szereplő.) Az import funkció nem vizsgálja a fájl belső szerkezetét, így ez a kérdés minden GIF kiterjesztésű állomány esetében meg fog jelenni az importálás előtt. Mozgó sprite pályájának beállításai Importáljuk be a smiley.gif nevű állományt, majd helyezzük a forgatókönyv első csatornájára! (A sétáló emberkét törölhetjük.) A sprite hossza legyen 40 frame. Mozgassuk a smiley-t a színpad bal alsó sarkából a jobb alsó sarokba, de úgy, hogy közben felugrál a színpad középpontjáig és onnan ugrál le a jobb alsó sarokba. A mozgás pályája legyen egy parabola (vagy egy ahhoz hasonló görbe)! A megoldás egyszerűbb, mint azt az első pillanatban hisszük. A sprite 20. frame-jén szúrjunk be egy kulcsképkockát, és a színpadon a smiley-t húzzuk a színpad középpontjába! 33
Ezután szúrjunk be egy újabb kulcsképkockát a 40. frame-en, és azon a smiley mozgassuk a színpad jobb alsó sarkába. Három ponttal két szakaszt jelöltünk ki pályaként, a mozgás alapértelmezés szerint azonban mégsem két – egymással kb. derékszöget bezáró – egyenes mentén, hanem egy ívelt pályán fog lejátszódni.
Több kulcsképkocka beszúrásával bonyolultabb pályákat is létrehozhatunk. A pályák kontrollpontjai az egérrel elmozgathatók, illetve a teljes pálya mozgatható a színpad síkjában, ha az egérrel a pálya „sínjét” fogjuk meg. Emellett a pálya egyéb jellemzői is beállíthatók. Kattintsunk ehhez a színpadon a sprite-on az egér jobb gombjával, majd válasszuk a helyi menüből a Tweening... menüpontot! Itt beállítható többek között a pálya görbülete (Curvature), illetve az, hogy a pálya végpontjai környezetében (a pálya elején és végén) változzon-e a sprite sebessége (Ease-In és -Out). Ezek felfedezését az Olvasóra bízzuk. Megjegyzés: az animált GIF-ek további lehetőségeiről olvashatunk a billentyűzet kezeléséról szóló fejezetben.
Real-time recording Amikor egy sprite mozgásának pályája igazán bonyolt kell, hogy legyen, a kontrollpontok és kulcsképkockák használata kényelmetlenné válik. A következő példában egy méhecskét ábrázoló animált GIF-et (flying bee.gif) szeretnénk a színpadon mozgatni. A színpadra helyezzünk el egy virágot ábrázoló képet is (happy flower.jpg), amire a méhecskének rá kell repülnie. Egészen pontosan a méhecske repüljön be a színpadra a bal oldali takarásból, és repülés közben mozogjon föl-le. (Az a jó, minél látványosabban repül, annak ellenére, hogy tudjuk, hogy a méhek kommunikációjában a mozgás pályájának igen fontos szerepe van, ezért a méhek nem szoktak „össze-vissza” repülni.) 34
Miután a méhecske odarepült a virághoz, ott időzzön el egy kicsit, majd gyorsan repüljön ki a színpad jobb oldali takarásába. A bemutató elkészítéséhez a Director Real-Time Recording nevű szolgáltatását fogjuk használni, de ezelőtt még szükséges néhány beállítás. Importáljuk be a flying bee.gif és a happy flower.jpg állományokat! Helyezzük el a virágot a színpad alján, balról nagyjából a színpad szélességének kétharmadánál! Tegyük a méhecskét a színpad bal oldali takarásába, és méretezzük át a virágot úgy, hogy a méhecske kényelmesen odarepülhessen hozzá! Észrevehetjük, hogy a méhecskét ábrázoló GIF háttere nem fehér. Hogy a háttér téglalapja ne repüljön a méhecskével együtt, állítsuk a színpad hátterét a méhecske hátterével egyező színűre. Ehhez kattintsunk a színpad egy üres területén, majd a Property Inspector Movie fülén állítsuk be a Color értéket #AFB0E1-re! Ekkor a virág háttere rontja el az összképet, állítsuk a virág sprite-jának Ink tulajdonságát Transparent értékűre a Property Inspectoron! (Képzeljük azt, hogy szürkület van, azért lett ilyen a virág színe!) A virág és a méhecske sprite-jai kezdődjenek a forgatókönyv 1. képkockáján, hosszuk legyen 40 frame! A Real-Time Recording lényege az, hogy elindítjuk a prezentációt, és futás alatt az egérrel rajzoljuk meg a mozgatni kívánt sprite pályáját. A rögzítés azonban a lejátszás sebességével fog történni. Ha a lejátszófej sebességét 30 frame/sec-on hagyjuk, az egész műveletre alig több, mint 1 másodpercünk lesz – ez nyilvánvalóan nem elég. Ezért nyissuk meg a Control Panelt a Window menüből, és állítsuk ott a lejátszás sebességét 5 frame/sec-re. Így 8 másodpercünk lesz a pálya rögzítéséhez.
Ezután kattintsunk a méhecskére a színpad ablakában, és válasszuk a Control > RealTime Recording menüpontot! A méhecske sprite-ja körüli fehér-piros keret egyértelműen jelezni fogja, hogy ez az a sprite, amelynek pályáját most rögzíteni fogjuk. A rögzítés akkor indul, amikor kattintunk az egérrel. Ekkor igyekezzünk gyorsan rögzíteni a teljes mozgást, hiszen 8 másodpercünk van csak! (Lehet, hogy nem sikerül azonnal, de ne csüggedjünk! Egy-két próba után menni fog.) Ha kész, állítsuk vissza a lejátszófej sebességét 30 frame/sec-re, és futtassuk művünket! Figyeljük meg, hogy a Real-Time Recording során létrehozott pálya minden frame-je kulcsképkocka lett a forgatókönyvben. Ezért van lehetőségünk a pálya utólagos korrigálására is, ha az szükséges: a kontrollpontokat az egér segítségével igazgathatjuk. 35
Egy fontos dolgot észre kell vennünk! Ha két sprite-unk a forgatókönyvben ugyanúgy helyezkedik el, mint a fenti képen (a méhecske sprite-ja van a 2. csatornán, a virágé pedig az 1. csatornán), akkor a méhecske el fogja takarni a virágot, amikor közel ér hozzá. Ennek az az oka, hogy a nagyobb sorszámú csatornán lévő sprite takarja a kisebb sorszámú csatornák sprite-jait – amint arról korábban már esett szó. A megoldás kézenfekvő: cseréljük fel a két sprite-ot a forgatókönyvben. Ezt az egérrel könnyen megtehetjük.
Fogjuk meg egérrel a felső sprite-ot, mozgassuk a 3. csatornára. Ezután a 2. csatornán lévő sprite átmozgatható az 1.-re, végül a 3.-ről húzzuk a 2.-ra a sprite-ot!
36
Roll-over gombok készítése Ismét visszatérünk a Budapest-prezentációhoz, és továbbfejlesztjük a főmenüt. A helyszínek gombjait alakítjuk roll-over típusúvá, ami azt jelenti, hogy a gomb „viselkedni” kezd, amint az egérrel megközelítjük. Ha az egeret a gomb fölé húzzuk, akkor a gomb képe megváltozik: kiemelkedik. Ha benyomjuk a bal gombot, akkor a gombkép is „benyomódik”, és úgy is marad, amíg az egér bal gombját lenyomva tartjuk. A prezentációhoz szükséges fájlok ismét a budapest.zip állományban találhatók. Ha a Készítsük el az első prezentációt című fejezetet feladatait végigcsináltuk, most nyissuk meg az ott elkészült Director-állományt. Ha nem, akkor először célszerű azt a feladatsort végigcsinálni, mert ez a fejezet onnan folytatódik, ahol azt abbahagytuk. (Esetleg bővíthető a menü a sprite-ok mozgatásával is.) Nyissuk meg a budapest.dir fájlt, és importáljuk be a szereposztásába a Hősök tere2.jpg, Hősök tere3.jpg, Halászbástya2.jpg és Halászbástya3.jpg állományokat! A szereplők sorrendje most tulajdonképpen lényegtelen.
A mouseEnter és mouseLeave események kezelése Ha egy sprite-ot elhelyezünk a színpadon, annak nem kell feltétlenül végig ugyanazt a szereplőt megjelenítenie, Az, hogy egy sprite melyik szereplőt jeleníti meg, ugyanolyan spritetulajdonság, mint a sprite helyzete a színpadon, szélessége, magassága stb. Ez azt jelenti, hogy akár futásidőben is megváltozhat, megváltoztatható. Ennek a feladatnak a megoldásához ezt a lehetőséget fogjuk felhasználni. A Budapest-prezentáció elkészítésekor elheleztük a színpadon a Halászbástya1 és Hősök tere1 feliratú gombok sprite-jait. Szeretnénk, ha ezek a sprite-ok megváltoznának, amint az egeret föléjük húzzuk. Pontosabban: amint az eredetileg a Halászbástya1-et megjelenítő sprite (ami a forgatókönyvben a 3. csatonán van) fölé húzzuk a színpadon az egeret, ez a 3. sprite attól a pillanattól mutassa a Halászbástya2 szereplőt egészen addig, amíg az egeret le nem húzzuk a sprite fölül. Amin lehúzzuk, a sprite-nak ismét a Halászbástya1-et kell mutatnia. Ugyanez a helyzet a Hősök tere1 és Hősök tere2 szereplőkkel. Annak az eseménynek, amely akkor következik be, amikor az egeret egy sprite területe fölé húzunk a színpadon, az a neve, hogy mouseEnter. Ez az esemény köthető sprite-hoz is (tehát behaviorként is értelmezhető), mi most mégis szereplőszkriptben fogjuk alkalmazni. Talán némi ellentmondás, hogy egy szereplőhöz kötünk egy sprite-on értelmezett eseményt. Ráadásul épp egy olyat, ami egy másik szereplőt jelenít meg – más szavakkal: az egyik szereplőhöz kötünk egy sprite-eseményt, ami egy másik szereplőt jelenít meg, mintha az egyik szereplő felcserélné magát egy másikkal… igazi kavarodás. Annyiban talán mégis logikus ez az eljárás, hogy ezek a szereplők és sprite-ok most egy nyomógomb három különböző állapotát ábrázolják, tehát egy objektumról van szó, ami időnként megváltoztatja a képét. Kattintsunk tehát jobb gombbal a Halászbástya1 szereplőn, és válasszuk a Cast member script menüpontot. Megjelenik a szkripteditor ablaka, benne a már szereplő mouseUp eseménykezelő. Ezt most töröljük ki, és helyette írjuk a következőt: on mouseEnter sprite(3).member = member("Halászbástya2") end
Ez az utasítás azt jelenti, hogy a 3. csatornán lévő sprite változtassa meg a hozzá tartozó 37
szereplőt a Halászbástya2-re. Pontosabban: a 3. csatornán lévő sprite ettől a pillanattól kezdve mutassa a Halászbástya2 szereplőt. Jogosan felmerülő kérdés, hogy vajon melyik spritera vonatkozik ez az értékadás, hiszen a 3. csatornán több sprite is van egymás mellett: a Halászbástya1 (gombkép), a Halászbástya és a Hősök tere (helyszínek képei) is. Ha egy szkriptben a sprite(sorszám) módon hivatkozunk egy sprite-ra, az mindig azt a sprite-ot jelenti, amely a sorszám-adik csatornán található, és azon a frame-en, amin a lejátszófej éppen tartózkodik. Más szóval: a sort a sorszám, az oszlopot pedig a lejátszófej aktuális pozíciója jelöli ki a forgatókönyvben. Egy spritecsatorna egy képkockájában természetesen csak egy sprite állhat egyszerre. Gondoskodnunk kell arról is, hogy amint az egeret lehúzzuk a Halászbástya feliratról, az újra az eredeti alakjában jelenjen meg (Halászbástya1). Azaz készítenünk kell egy szkriptet, amely gondoskodik arról, hogy a 3. csatornán álló sprite ismét a Halászbástya1-et mutassa, amint az egeret lehúzzuk a Halászbástya2-ről. Nem tévedés: a Halászbástya1-ről nem tudjuk lehúzni az egeret, mivel amint föléhúztuk az egeret, ez a kép eltűnt és helyette a Halászbástya2 jelent meg. Logikus, hogy azt az eseményt, amely az egér lehúzását kezeli (mouseLeave a neve), a Halászbástya2 szereplő szkriptjében kell lekezelnünk. Kattintsunk jobb gombbal a Halászbástya2 szereplőn a szereposztásban, és válasszuk a Cast member script menüpontot! Hagyjuk üresen az on mouseUp eseménykezelő törzsét, és készítsük el alá az on mouseLeave eseménykezelőt! A szkriptablakban ennek kell szerepelnie: on mouseUp end on mouseLeave sprite(3).member = member("Halászbástya1") end
A jelenleg üres mouseUp eseménykezelőt akár törölhetnénk is, de később még szükségünk lesz rá, úgyhogy inkább hagyjuk ott – egyelőre üresen.
A mouseDown esemény kezelése Ha lefuttatjuk a prezentációt, a Halászbástya gomb már érzékelni fogja, ha fölé húzzuk az egeret, illetve ha lehúzzuk róla. Állítsuk be most azt, hogy amíg a bal gombot nyomva tartjuk az egéren – a nyomógomb fölött állva a mutatóval a színpadon –, addig jelenjen meg a Halászbástya3 változat! A bal gomb lenyomásához a mouseDown eseménykezelő tartozik. Ez az eseménykezelő azonban csak akkor aktiválódik, amikor megnyomjuk a gombot. Ha az már nyomva van – azaz nyomva tartjuk a bal gombot –, akkor nem. Nekünk kell gondokodnunk arról is, hogy figyeljük: nyomva van-e tartva a bal gomb. (Elnézést a borzalmas megfogalmazásért, a szemléletesség miatt írtam így. – T. P.) Amikor futás közben megnyomjuk a bal gombot a Halászbástya2 szereplőt megjelenítő (a 3. csatornán lévő) sprite-on állva a színpadon, akkor mindaddig, amíg nyomva van tartva a gomb, a Halászbástya3 szereplőt kell megjeleníteni. Amint megszűnik ez az állapot (tehát már nincs lenyomva a bal gomb), vissza kell tenni a Halászbástya2-t. Vegyük észre, hogy itt más is történik! Mit jelent az, hogy már nincs lenyomva a bal gomb? Azt (is), hogy bekö38
vetkezett egy másik esemény ezen a sprite-on, mégpedig a mouseUp. Ezt az eseménykezelőt hagytuk az előbb üresen, ideje, hogy ezt is elkészítsük. Térjünk azonban először vissza a Halászbástya3 megjelenítéséhez! Vizsgálnunk kell a bal gomb lenyomott állapotát. Ehhez a Director egy rendszertulajdonságát (lásd: Készítsük el az első prezentációt című fejezet!) kell felhasználnunk, aminek the mouseDown a neve. Vigyázat: az on mouseDown egy eseménykezelő, a the mouseDown pedig egy rendszertulajdonság. Utóbbi kétféle értéket vehet fel: ha a bal gomb le van nyomva, akkor az értéke True (logikai igaz), ha nincs lenyomva, akkor az értéke False (logikai hamis). Készítsünk egy feltételes ciklust, amely addig fut, amíg a bal gomb le van nyomva. A logikai ciklus szintaxisa a Directorban: repeat while feltétel utasítások end repeat
A feltétel egy logikai kifejezés (értéke True vagy False). A ciklus magja addig ismétlődik, amíg a feltétel igaz. Ezt felhasználva lássuk a teljes szkriptet (egészítsük ki a Halászbástya2 szereplőhöz tartozó szkriptet az alábbiakra): on mouseUp go to frame "Halászbástya" end on mouseLeave sprite(3).member = member("Halászbástya1") end on mouseDown repeat while the mouseDown sprite(3).member = member("Halászbástya3") updateStage end repeat sprite(3).member = member("Halászbástya2") end
Egy dolog még magyarázatra szorul. Amikor egy szkript (valamely eseménykezelője) lefut, a Director automatikusan frissíti a színpadot. Egy eseménykezelő futása közben azonban nem. Ha azt szeretnénk, hogy egy eseménykezelő futása közben is frissítődjék a színpad, tehát az esetleg bekövetkező változások látsszanak is rajta, ezt külön jelezni kell a Director számára. Erre való az updateStage utasítás. Ezt azért kellett a ciklus belsejébe írnunk, mert amíg a bal gomb le van nyomva az egéren, ez a ciklus fut. Ez azt is jelenti, hogy nem tud véget érni az on mouseDown eseménykezelő futása, tehát a Director nem tudja önmagától (automatikusan) frissítani a színpadot. Figyeljünk meg még egy dolgot. A Windows-ban megszoktuk, hogy ha egy nyomógomb fölött állva az egérrel lenyomjuk a bal gombot, majd – a bal gombot továbbra is nyomva tartva – lehúzzuk a gombról az egeret, a kattintás eseménye nem következik be. A Windows-ban alapértelmezett, hogy csak akkor kattintunk, amikor a gomb elengedésekor még az objetum fölött állunk az egérrel. Ez a Directorban nem így van – próbáljuk ki! 39
A billentyűzet kezelése Lingo-szkriptekből Hasonlóan az egérkezeléshez, a billentyűzeten bekövetkező eseményeket is kezelhetjük Lingo-szkriptekben. Ugyanúgy, mint valamely egérgomb lenyomása esetében, a billentyűk használata is két eseményt válthat ki: a billentyű lenyomásakor bekövetkezik a keyDown esemény, míg egy lenyomott gomb elengedésekor a keyUp. Ránk van bízva, mikor melyiket kezeljük le – ez nyilván az adott feladattól is függ. A lenyomott billentyűket billentyűkódok azonosítják. Akik más programozási nyelvekben már szereztek némi jártasságot, arra számíthatnak, hogy ezek a billentyűkódok valamilyen összefüggésben vannak az ASCII-kódrendszerrel. Nos, a Lingo esetében ez nem így van, a billentyűkódoknak semmi köze az ASCII-hez. Első feladatunk lehet az, hogy kiderítjük, mi a prezentációnkban használni kívánt billentyűk kódja.
Billentyűkódok meghatározása Készítünk egy nagyon egyszerű prezentációt. A színpad mérete most nem is lényeges. mivel nem azt fogjuk használni a billentyűkódok kiírására. A Directorban ugyanis van egy kifejezetten a prezentációk teszteléshez használható üzenetablak (Window > Message Box), melyet kapcsoljunk most be! Bármilyen a futtatás alatti üzenetet szeretne a Director közölni velünk, az ebben az üzenetablakban fog megjelenni. (Eddigi prezentációink futása alatt is megjelent itt néhány üzenet, csak nem tudtunk róla.) Azonban nem csak a Director, de mi is tudunk ide üzeneteket küldeni. Hasznos lehet pl. futás közben bizonyos változók értékeit kiíratni, vagy mint ebben a példában, valamilyen rendszerérték (system property) értékét. Készítsünk egy képkockaszkriptet a szkriptcsatorna első képkockáján: kattintsunk rá duplán! A szkriptablakba írjuk a következőket: on exitFrame me go to the frame end on keyUp put the keyCode end
Az első eseménykezelőre azért van szükségünk, hogy a lejátszófej maradjon az első képkockán. A második eseménykezelő figyeli a billentyűzetet, és ha lenyomunk egy gombot (egészen pontosan ha felengedünk egy lenyomott gombot), kiírja annak Directorbeli billentyűkódját – ha van neki. Próbáljuk ki, hogy vannak olyan gombok, amiknek – sajnos – nincs billentyűkódja a Directorban. Ilyen gombok pl. a Shift, a Ctrl, stb. Az üzenetablakba a put paranccsal tudunk írni. A the keyCode egy rendszertulajdonság, ami az utoljára lenyomott billentyű kódját tárolja. Ahhoz, hogy lássuk is az eredményt, egyrészt legyen bekapcsolva az üzenetablak, továbbá legyen aktív futtatáskor a színpad ablaka. Azért kell, hogy aktív legyen a színpad ablaka, mert a billentyűzetfigyelő csak ekkor működik. A következő prezentációkhoz a kurzormozgató gombok kódjait kell ismernünk, ezért próbáljuk ki azokat a fenti rövid program futtatása alatt. Aki nem tudja ezeket fejben tartani, esetleg nem boldogult a fenti programmal, annak kedvéért ide is leírjuk a kódokat: a jobbra nyíl kódja 124, a balra nyílé 123, a felfelé nyílé 126, a lefelé nyílé pedig 125. 40
Sprite mozgatása billenyűzet segítségével Ebben a példában újra egy animált GIF-et fogunk a képernyőn (színpadon) mozgatni, most azonban a billentyűzet segítségével. Az alábbiak megértése után akár játékprogramot is készíthetünk a Directorral, bár lehetőségeink egyelőre elég korlátozottak lesznek még e téren. A prezentációhoz szükséges fájlok az animacio.zip állományban találhatók.
Az animált GIF tulajdonságainak beállítása Importáljuk be a 640×480 pixel méretű prezentációnk szereposztásába a szamaras.gif állományt! Látható, hogy a GIF háttérszíne fekete, állítsuk hát át a színpad háttérszínét is feketése (#000000)! Méretezzük át a GIF-et a színpad méretéhez (eredeti méretében túl nagy lenne), és húzzuk a színpad bal oldali takarásába! A sprite hossza legyen 10 frame, a szkriptcsatorna 10. frame-jére pedig hozzunk létre egy szkriptet, melyben megállítjuk a lejátszófejet, és figyeljük a billentyűzetet!
Az előző animált GIF-es példában láttuk, hogy ezeket a fájlokat a Director le tudja játszani. Ám ennél többre is képes, ugyanis szabályozni tudja pl. a lejátszás sebességét. Az animált GIF-ek esetében is értelmezhető a frame/sec mértékegység. Ennek nagyságát háromféle értékkel határozhatjuk meg. Fontos, hogy ezek az animált GIF-nek, mint szereplőnek a tulajdonságai, nem pedig a belőle létrehozott sprite-nak. Ezért először kattintsunk a GIF-re a szereposztásban, majd keressük a Property Inspectoron az Animated GIF fület! Itt a Rate tulajdonság háromféle értéket vehet fel: • Normal: az animált GIF-et a Director eredeti sebességgel játssza le. A lejátszás sebessé41
gének adatai ugyanis magában az animált GIF-et tartalmazó fájlban van eltárolva, és animált GIF-eket kezelő programokkal (pl. Adobe ImageReady) változtatható meg. • Fixed: ezt a lehetőséget választva felülbírálhatjuk az animált GIF eredeti sebességét, és az FPS tulajdonsághoz beírt értékűre állíthatjuk azt. • Lock-Step: ezt az opciót választva az animált GIF lejátszási sebessége meg fog egyezni a forgatókönyv lejátszófejének sebességével. Mi most válasszuk a Fixed értéket és adjunk meg 30 fps-t!
Sprite helyének változtatása Lingo-szkriptben Szeretnénk, ha a prezentációt futtatva a szamarát vezető ember a kurzormozgató gombok hatására sétálna a képernyőn. Ehhez tudnunk kell Lingo-parancsokkal megváltoztatni a helyét. Ennek a feladatnak a megoldásához elég, ha a sprite regisztrációs pontjának helyét meg tudjuk változtatni a színpadon. A regisztrációs pont helye egy koordinátapárral jelölhető ki a színpadon, annak bal felső sarkához viszonyítva. Az X-koordinátát a locH, az Y-koordinátát a locV spritetulajdonságok tárolják. Ezek írhatók és olvashatók, azaz értéküket ki is tudjuk olvasni, és meg is tudjuk változtatni. Bővítsük az előbbiekben megadott szkriptablak tartalmát a következőkre: on exitFrame me go to the frame end on keyDown if the keyCode = sprite(1).locH end if if the keyCode = sprite(1).locH end if end
124 then = sprite(1).locH + 5 123 then = sprite(1).locH - 5
Ha a felhasználó a jobbra nyilat nyomja a billentyűzeten, a sprite regisztrációs pontjának X-koordinátáját 5 pixellel jobbra toljuk. Ha a balra nyilat, akkor pedig 5 pixellel balra. Ez a megoldás egyelőre nem túl esztétikus, a szamaras ember ugyanis tolatni fog, amikor balra halad. Nem beszélve arról, hogy amikor nem nyomunk semmilyen gombot a billentyűzeten, emberünk akkor is járni fog, csak egy helyben. Javítsuk ki ezeket a hibákat!
Animált GIF tükrözése és megállítása Egy animált GIF lejátszás közben tükrözhető, a vízszintes és a függőleges tengely mentén egyaránt. Előbbit a flipH, utóbbit a flipV tulajdonság True vagy False értékűre állításával tehetjük meg. Ha szeretnénk egy animált GIF-et megállítani futásidőben, használjuk a pause(), újraindításához pedig a resume() metódust. A metódusok valamely objektumra vonatkozó utasítások, melyek az objektum működését befolyásolják. Nem adható nekik érték, mint a tulajdonságoknak, és nevük végén kerek zárójelek vannak, melyekbe az esetleges paramétereket írjuk. Ha nincs paraméterük, a zárójeleket akkor is ki kell írnunk. Módosítsuk az előző szkriptet az alábbiakra: 42
on exitFrame me go to the frame end on keyDown if the keyCode = 124 then sprite(1).locH = sprite(1).locH + 5 sprite(1).resume() sprite(1).flipH = false end if if the keyCode = 123 then sprite(1).locH = sprite(1).locH - 5 sprite(1).resume() sprite(1).flipH = true end if end on keyUp sprite(1).pause() end
Próbáljuk ki és mentsük prezentációnkat!
Sprite-ok megjelenítése Lingo-szkriptekkel Térjünk vissza ismét a Budapest-prezentációhoz. Most újra a menüt bővítjük, mégpedig úgy, hogy amint a felhasználó valamely helyszín gombja fölé húzza az egeret, azon kívül hogy a gomb kiemelkedik – hiszen roll-over gombbá alakítottuk –, a helyszín képe is felvillan a színpad jobb alsó sarkában. A prezentációhoz szükséges fájlok a Budapest.zip állományban találhatók. A legjobb az, ha elmentettük a Budapest-prezentációnak azt a változatát, amelyben a menüben a gombok roll-over gombként működnek. Ha ez nincs meg, először csináljuk végig azt a feladatsort!
A puppet csatornák Eddig minden sprite-ot úgy hoztunk létre, hogy a szereposztásból a forgatókönyvbe húztuk. Egy sprite úgy is megjelenhet a színpadon, hogy nem a forgatókönyv vezérli, hanem Lingo-szkript. Amikor egy sprite-ot a forgatókönyvben hoztunk létre, a tulajdonságait Lingo-szkriptekből is vezérelhetjük. Ahhoz azonban, hogy egy sprite-ot Lingo-szkriptekkel hozzunk létre, egy fontos tudnivalót meg kell jegyeznünk! A Lingo-vezérelt csatornáknak van egy speciális tulajdonsága, ez a puppet tulajdonság, mely True vagy False értéket vehet fel. Annak a csatornának, amelyen Lingo-szkriptből hozunk létre sprite-ot, a puppet tulajdonságának True-nak kell lennie. Hiába szeretnénk egy sprite-ot megjeleníteni a színpadon Lingo-szkriptből, ha ezt a puppet tulajdonságot nem használjuk, a sprite láthatatlan marad. 43
sprite(sorszám).puppet = True | False
Tegyük a 6. és 7. csatornákat puppet-csatornává. A 6. csatornán a Halászbástya, a 7. csatornán a Hősök tere képe fog felvillanni. Addig lesznek láthatók a helyszínek képei a jobb alsó sarokban, amíg az egérrel az adott helyszín neve fölött állunk az egérrel. Keressük a szereposztásban a Halászbástya1 szereplőt, és nyissuk meg a szkiptablakban a hozzá tartozó szereplőszkriptet! Ezt bővítsük az alábbi módon! on mouseEnter sprite(3).member = member(“Halászbástya2”) sprite(6).puppet = true sprite(6).member = member(“Halászbástya”) sprite(6).width = 120 sprite(6).height = 160 sprite(6).locH = 560 sprite(6).locV = 380 sprite(6).visible = true end
Miután a 6. csatorna puppet tulajdonságát beállítjuk, megadjuk, hogy ezen a csatornán a Halászbástya nevű szereplőnek (a helyszín képnek) kell megjelennie. Ezután beállítjuk a sprite szélességét, magasságát, illetve regisztrációs pontjának X- és Y-koordinátáját. Végül bekapcsoljuk a csatorna láthatóságát. Erre azért van szükség, mert a Halászbástya2 szereplő mouseLeave eseménykezelőjében egyszerűen csak kikapcsoljuk a 6. csatorna láthatóságát, ezzel eltűntetve a képet a színpadról. Nyissuk is meg a Halászbástya2 szereplőszkriptjét, és módosítsuk az alábbiak szerint: on mouseUp go to frame “Halászbástya” end on mouseLeave sprite(3).member = member(“Halászbástya1”) sprite(6).visible = false -- csak ez az egy új sor kell end on mouseDown repeat while the mouseDown sprite(3).member = member(“Halászbástya3”) updateStage end repeat sprite(3).member = member(“Halászbástya2”) end
Egy kommenttel jelöltük, hogy melyik sort kell csak beszúrni az eddigiekhez. A koommenteket (megjegyzéseket) – – jel után kell elhelyeznünk a szkriptekben. A jelölt utasítás kikapcsolja a 6. csatorna láthatóságát, így tűnteti el a Halászbástya képét a színpad jobb alsó sarkából. 44
Járjunk el hasonlóképpen a Hősök tere esetében is! Megjegyzés: az előző szkriptben a sprite méretét és pozícióját négy értékadással állítottuk be. Lehetőségünk van ezt egyetlen értékadással is megtenni, ha alkalmazzuk a rect spritetulajdonságot. sprite(sorszám).rect = rect(bfx, bfy, jax, jay)
A rect tulajdonság a sprite által megjelenítendő kép befoglaló téglalapja bal felső és jobb alsó sarkának koordinátáit határozza meg. A befoglaló téglalap az a téglalap alakú terület a színpadon, ahol a sprite megjeleníti a képet. Ennek bal felső sarkának korrdinátái (bfx; bfy), jobb alsó sarkái pedig (jax; jay). A Hősök tere képét próbáljuk ennek segítségével megjeleníteni: sprite(7).rect = rect(460, 340, 620, 460)
Ezzel az egy értékedással kiváltható a width, height, locV és locH tulajdonságok értékének beállítása. Mentsük és futtassuk prezentációnkat!
Képernyőeffektusok és zene kezelése szkriptekben Készítsünk képnézegetőt, melyben egri képeket lehet slideshow-ként megtekinteni. A képek között a kurzormozgató gombokkal választhatunk. A prezentációban kipróbáljuk a zenecsatornák Lingo-szkriptekkel történő vezérlését is. A prezentációhoz szükséges fájlok az Eger.zip állományban találhatók.
A prezentáció beállításai Hozzunk létre egy 800×600 pixel méretű mozit. Csomagoljuk ki az Eger.zip állományt, majd importáljuk be belőle a prezentáció szereplőit! Importáláskor ügyeljünk arra, hogy a képek legyenek az első 15 szereplőhelyen, mert ebben a prezentációban a szereplők sorszámaival fogunk rájuk hivatkozni! A színpad háttérszínét állítsuk fehérre (#FFFFFF). Hozzunk létre a 01 nevű képből egy sprite-ot az első csatornán, ennek hossza legyen mindössze 1 frame. A képekre – mint azt már említettük – a szereposztásbeli sorszámukkal fogunk hivatkozni. Definiálunk egy sorszám nevű változót, amely az 1..15 tartományból vehet fel értékeket. A sorszám értéke fogja azt mutatni, hogy hányadik kép van kint éppen a színpadon. A jobbra–balra nyilak segítségével ennek a változónak az értékét fogjuk megváltoztatni, és ezzel a képeket kicserélni a színpadon. A zeneszereplők nevei azonban nem sorszámok. A zenék között a fel–le nyilakkal lehet majd válogatni, de hogy éppen melyik zenének kell szólnia, azt egy tömb segítségével határozzuk meg. A tömbnek 12 eleme lesz, a 12 zeneszám címe. A zeneSorszám változó ennek a tömbnek egy elemét határozza meg. A zeneSorszám változó által tárolt 1..12 értékek közül az aktuálisnak megfelelő zenét kell majd lejátszanunk. Állítsuk be ezeket a kezdőértékeket egy moziszkriptben. Egy moziszkript a prezentáció teljes futásideje alatt aktív, vagyis a benne szereplő eseménykezelők bármikor vezérlést kaphatnak, amikor az általuk kezelt esemény bekövetkezik. Mi most a startMovie eseményhez tartozó eseménykezelőt fogjuk beállítani. Ez az esemény akkor következik be, amikor a prezentáció elindul. 45
Hozzuk létre a moziszriptet! Kattintsunk a szereposztás következő üres szereplőhelyére, majd keressük a Director képernyőjének tetején – a menüsor alatt – a Script Window gombot! Amikor megynomjuk, megnyílik a szkriptablak. Fontos, hogy ellenőrizzük: Movie Script jött létre, nem pedig Behvior. Ha a szkriptablak címsorában a Behavior szót látnánk, zárjuk be az ablakot, majd nyissuk meg újra a Script Window gomb megnyomásával! Másodjára biztosan moziszkript jön létre.
A startMovie eseménykezelő A megnyílt szkriptablakba írjuk a következő szkriptet: global sorszám, zene, zeneSorszám on startMovie sorszám = 1 zeneSorszám = 1 set zene = ["01. A Day Without Rain", "02. Wild Child", \ "03. Only Time", "04. Tempus Vernum", "05. Deora Ar Mo Chroi", \ "06. Flora’s Secret", "07. Fallen Embers", "08. Silver Inches", \ "09. Pilgrim", "10. One By One", "11. The First Of Autumn", \ "12. Lazy Days"] sound(1).play(member(zene[1])) end
Beállítjuk a sorszám és a zeneSorszám változók kezdőértékeit. Ezután feltöltjük a zene nevű tömböt a 12 szám címével. A tömbök megadása – mint az fent is látható – a set kulcsszóval történik, a tömb-kezdőértékeket szögletes zárójelek között vesszővel elválasztva soroljuk fel. Ez a tömbdeklaráció egy sorban igen hosszú és áttekinthetetlen lenne. A Directorban egy utasítás alapértelmezés szerint a sor végéig tart. Ha szeretnénk egy utasítást több sorba törni, akkor használjuk a └┘\ (szóköz–backslash) karaktersorozatot! (Hogy biztosan elkerüljük az elgépelések miatti hibákat, az Eger.zip állományban található egy files.txt fájl. Ebből hiba nélkül ki tudjuk másolni a fenti tömbdeklarációt, és kedvünk szerint széttördelhetjük a sorokat.) Említést kell tennünk a szkript elején található global deklarációról. A Directorban egy változó mindig arra az eseménykezelőre lokális, amelyben deklaráljuk. (A deklaráció az értékadással megtörténik.) Ha szeretnénk, hogy egy változó két eseménykezelő között (esetleg két szkript között) is ugyanazt az értéket tárolja, vagyis szeretnénk egy változót globálissá tenni, akkor a szkript elején ezt jeleznünk kell a global kulcsszóval. A fenti példában azért van szükség a változók globálissá tételére, mert egy másik szkriptben is használni fogjuk értéküket. A tömbdeklaráció után elkezdjük lejátszani az első zeneszámot. Tekintsük át a zenecsatornák vezérlésénak Lingo-parancsait!
Zenecsatornák vezérlése Lingo-szkriptekből Spritecsatornákat a sprite(sorszám) hivatkozással tudunk elérni, zenecsatornákat a szintaxisú hivatkozással. A sorszám zenecsatornák esetében 1..8 közötti érték lehet. sound(sorszám)
46
Zene lejátszása, szüneteltetése, megállítása A lejátszandó zenének a szereposztásban kell szerepelnie. A lejátszás a play() metódussal történik, paraméterként a szereplő nevét vagy sorszámát kell megadnunk. A zene megállítása a paraméter nélküli stop(), míg szüneteltetése a pause() metódussal történhet. Hangerő Minden csatorna hangereje külön szabályozható a volume tulajdonság beállításával, mely a 0..255 tartományból vehet fel (egész) értékeket. sound(sorszám).volume = érték
Szintén a hangerő szabályozására szolgálnak a fadeIn(időtartam), fadeOut(időtartam) és fadeTo(hangerő, időtartam) metódusok, ahol az időtartam mindhárom esetében ezredmásodpercekben értendő. A fadeIn a megadott időtartam alatt 255-re hangosítja a hangerőt az adott csatornán, a fadeOut 0-ra csökkenti a hangerőt a megadott időtartam alatt, míg a fadeTo a megadott hangerőre állítja a hangerősséget, ami a megadott időtartam alatt következik be. Például: sound(1).fadeTo(200, 3000)
Ez a parancs az 1-es hangcsatorna hangerejét állítja be 200-ra 3 másodperc alatt.
A billentyűzetkezelő szkript Hozzunk létre a szkriptcsatorna 1. képkockáján egy képkockaszkriptet, tartalma a következő legyen! global sorszám, trans, zene, zeneSorszám on exitFrame me go to the frame end on keydown case the keyCode of 124: sorszám = sorszám + 1 trans = 12 megjelenít 123: sorszám = sorszám - 1 trans = 11 megjelenít 126: zeneSorszám = zeneSorszám + 1 újZene -- folytatás a következő oldalon
47
-- folytatás az előző oldalról 125: zeneSorszám = zeneSorszám - 1 újZene end case end on megjelenít if sorszám = 11 then sorszám = 1 end if if sorszám = 0 then sorszám = 10 end if sprite(1).member = member(sorszám) sprite(1).puppet = true sprite(1).rect = rect(0,0,800,600) sprite(1).visible = true puppetTransition trans, 1, 10, TRUE end on újZene if zeneSorszám = 13 then zeneSorszám = 1 else if zeneSorszám = 0 then zeneSorszám = 12 end if sound(1).fadeOut(2000) repeat while sound(1).volume > 0 put sound(1).volume end repeat sound(1).play(member(zene[zeneSorszám])) sound(1).fadeIn(2000) end
A case kifejezés of szerkezet segítségével esetszétválasztást (többirányú elágazást) hozhatunk létre. Ezzel kiválthatjuk a bonyolult if ... then ... else if ... then típusú szerkezeteket. A jobbra–balra nyilakkal a sorszám változó értékét állítjuk be, majd meghívjuk a megjelenít nevű eseménykezelőt (alprogramot). Ez megvizsgálja, hogy a sorszám nem vett-e fel nemlétező képsorszámot értékként (kisebbet mint 1 vagy nagyobbat mint 10), majd az 1-es csatornát puppet-csatornává alakítva megjeleníti a megfelelő sorszámú képet. (Az 1-es csatornán a forgatókönyvben elhelyezett képre csak az első billentyű leütéséig van szükségünk.) A képeket transitionnel jelenítjük meg, azonban most nem használható a Transition Channel a forgatókönyvben, hiszen az egész prezentáció mindössze 1 képkocka hosszú. 48
A puppetTransition parancs Amikor egy sprite-ot puppet-csatornán Lingo-szkripttel jelenítünk meg, és szeretnénk ezt képernyőeffektussal megtenni, a puppetTransition parancsot kell használnunk, melynek szintaxisa a következő: puppetTransition effektus, időtartam, pixelekSzáma, terület
A fentiek közül csak az effektus paraméter következő, mely a használni kívánt képernyőeffektus sorszáma. (A sorszámokat a Director helpjében megtaláljuk.) Az időtartam az effektus lejátszásának időtartamát jelenti negyedmásodpercekben, értéke 0..120 között lehet (a leghosszabb effektus tehát 30 másodpercig tarthat). A pixelekSzáma paraméter csak bizonyos effektusoknál értelmezett. Minél nagyobb ez a szám, annál nagyobb részleteket jelenít meg a sprite-ból a Director az effektus egy időegysége alatt. Figyelem: a lejátszás sebessége – sajnos – nemcsak az időtartam paraméter értékétől függ. Minél finomabb (azaz kisebb) értéket állítunk be a pixelekSzáma paraméternek, annál tovább fog tartani a sprite teljes megjelenítése. A terület paraméter értéke true vagy false lehet. Ha true, akkor az effektus csak azon a színpadterületen zajlik le, ahol az új sprite megjelenik. Ha false, az effektus a színpad teljes területén látható lesz. Figyeljük meg, hogy a fenti szkriptben kétféle transitiont használunk. Attól függően, hogy az előző vagy a következő képet jelenítjük meg, a kép jobbról vagy balról gördül be a képernyőre. Ezt a trans változó értéke szabályozza. Ennek a változónak is globálisnak kell lennie, hiszen több eseménykezelőben is felhasználjuk értékét. Még egyszer a hangerőről Az újZene eseménykezelőben játsszuk le a következő vagy előző zenét. Amint az látható, a zenéket elhalkítjuk, mielőtt a következőt elindítanánk, amit pedig felerősítve kezdünk lejátszani. A gond a halkítással van, ugyanis a fadeOut metódus nem várja meg, míg elhalkul a zene, hanem a háttérben máris fut tovább a szkript. Ez azért baj, mert ha nem várunk a zenecsatorna hangerejének 0-ra csökkenéséig, akkor ez az effektus nem lesz hallható. Ezért egy várakozó ciklust kell a programba építenünk. repeat while sound(1).volume > 0 put sound(1).volume end repeat
Ez a ciklus addig vár, míg az 1-es csatorna hangereje 0-ra nem csökken. A ciklus magja lehetne akár üres is, hiszen nem kell, hogy ezt a folyamatot lássuk is, a Director azonban tiltja az olyan ciklusokat, amiknek a magja üres. Ezért kellett oda valamilyen utasítást írnunk, ezzel egyben akár meg is figyelhetjük a Message Boxban, hogy hogyan csökken a hangerő.
Teszt készítése Directorral Készítsünk olyan prezentációt, melyben feleletválasztós kérdésekre kell a felhasználónak válaszolnia. A válaszokat a Director kiértékeli, és közli a felhasználóval a végeredményt. A kérdéseket, a válaszlehetőségeket és a helyes válaszokat egy szövegfájlból olvassuk be. A későbbiekben elég lesz ezt a fájlt módosítanunk, a szkripteken nem kell. 49
A prezentációhoz szükséges fájlok a teszt.zip állományban találhatók. Az eddigiektől eltérően a ZIP-állomány tartalmazza a kész prezentációt is Director-formátumban. Próbáljuk ki, mielőtt megpróbáljuk reprodukálni. Fontos, hogy a DIR- és az RTFfájlok ugyanabban a mappában legyenek! Készítsük el a prezentáció kezdőképernyőjét az alábbi minta szerint!
Hozzunk létre egy szöveges szereplőt, mely majd a kérdés szövegét fogja mutatni, illetve négy rádiógombot, mely a válaszlehetőségeket. Ezen kívül szükségünk lesz két nyomógombra is. Az eddigiektől eltérően a szereposztás most listaszerű, hogy minden szereplő neve látható legyen. Figyeljünk arra, hogy a szereplők nevei egyezzenek meg a fenti mintában láthatóval! A szkriptcsatorna 10. kockáján állítsuk meg a lejátszófejet egy go to the frame-mel! A Kilépés gomb szkritpjébe írjuk a halt utasítást, amely megállítja a futó prezentációt! A fenti mintában a harmadik szereplő neve kérdések. Ide fogja a program beimportálni a kérdések.rtf fájlt. Ahhoz azonban, hogy ez az import jól működjön, az importálás előtt létre kell hoznunk a 3. szereplőhelyen egy kérdések nevű szöveges szereplőt. A tartalma tetszőleges, mert a program azt majd felülírja, de szükséges, hogy kérdések legyen a neve és szöveges típusú legyen. Ehhez először jelöljük ki a még üres szereplőhelyet (nem muszáj feltétlenül a 3. szereplőnek lennie), majd válasszuk az Insert > Media Element > Text menüpontot. A szereplő neve legyen kérdések, a szereplő tartalma tetszőleges. Úgy is létrehozhatjuk ezt a szereplőt, hogy a Director eszköztáráról kijelöljük a Text eszközt (A betű az ikonja), majd a színpadon kattintunk vele és beírjuk a szöveget. Nincs viszont szükségünk erre a szereplőre sprite-ként, tehát ha ezt a megoldást választottuk, akkor miután létrejött a szereplő és a sprite is, a sprite-ot töröljük, a szereplőt pedig nevezzük át a szereposztásban. 50
Insert > Media Element > Text További magyarázatok helyett lássuk a szkripteket, az értelemzésüket az Olvasóra bízzuk. Kezdjük a moziszkripttel!
51
Lássuk most a szkriptcsatorna első képkockájára elhelyezett szkriptet!
Most következzenek a válasz1, válasz2, stb. nevű szereplők cast member scriptjei!
52
Végezetül jöjjön a gombKövetkező szereplő szkriptje:
53