Tutorial 4
Ohjeistusta maze pelin rakenteluun:
- Tee kuusi movieclippiä:
- sokkelo mc (sisältää pelitason) (rekisteröintipiste ylh. vasemalla, koko sama kuin stagen koko: esim 800 x 600)
- jonka sisälle sijoitetaan:
- kivi mc (useampia instansseja)
- avain
- pelihahmo
- ovi mc
- pahis mörkö mc
- jonka sisälle sijoitetaan:
- sokkelo mc (sisältää pelitason) (rekisteröintipiste ylh. vasemalla, koko sama kuin stagen koko: esim 800 x 600)
- linkitä sokkelo mc Sokkelo_taso1 luokkaan eli valitse movieclipistä properties > Export for actionscript ja luokkanimi: Sokkelo_taso1
- kopioi Y:\Käpylä\AV-Viestinta_2\flashpeli\maze_tiedostot
kansiosta kaikki .as tiedostot omaan kansioosi - muuta Sokkelo_taso1_pohja.as tiedostonnimi Sokkelo_taso1.as tiedostoksi
- valitse kirjastosta kivi mc ja properties > Export for actionscript ja luokkanimeksi Wall (isoilla ja pienillä kirjaimilla oli väliä)
- tarkista myös, että kivi mc:n rekisteröintipiste on keskellä
- valitse kirjastosta pelihahmo mc ja properties > Export for actionscript ja luokkanimeksi Player ( rekisteröintipiste on keskellä) (täällä myös isoilla ja pienillä kirjaimilla oli väliä)
- valitse kirjastosta ovi mc ja properties > Export for actionscript ja luokkanimeksi Door ( rekisteröintipiste keskellä)
- instanssin nimet:
pelihahmolle instanssin nimi: player
avain mc: lle instanssin nimi: doorKey
ovi mc:lle instanssin nimi: doorOne
pahis mörkö movieclipille instanssin nimi: pahisUno
toiselle pahis mörkö movieclipille instanssin nimi: pahisDue - tuo kivi mc:t kirjastosta sokkelo mc- movieclipin pelitasoon
- pistemittari: health meter:
tee pistemittari / pelihahmon "terveystilamittari" movieclippi:- kaksi sisäkkäistä movieclippiä: suorakulma (instanssin nimi health), jonka sisällä täyteväri myös erillinen movieclippi (instanssin nimi meter)
- Game over movieclippi: tee movieclip kirjastoon (ei vielä stagella)
valitse properties > Export for actionscript ja luokkanimeksi GameOver - tee Game over movieclipin sisälle dynaaminen tekstikenttä, jonka instanssin nimi messageDisplay: tekstikenttä tyyppiä classic ja dynamic, lisää myös embed nappulalla merkit: uppercase, lowercase, ja muut tarvittavat merkit "Also include these characters" tekstikenttään tarvitaan ainakin huutomerkki: !
- koodin kohtaa 7. varten tee movieclip jolla instanssin nimi exit (kun pelihahmo osuu tähän movieclippiin pelaaja voittaa pelin)
- pahishahmot saa liikkumaan esim. motiontween animoinnilla movieclipin omalla aikajanalla
- avaa Sokkelo_taso1.as luokkatiedosto editointia varten
- täydennä seuraavaan Sokkelo_taso1 koodipohjaan onEnterFrame metodin pelilooppi monisteesta: (tämä koodi löytyi siis myös y asemalta ( ks. kohta 4.)
-
package { import flash.display.MovieClip; import flash.events.Event; public class Sokkelo_taso1 extends MovieClip { public function Sokkelo_taso1() { addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); } private function onAddedToStage(event:Event):void { //Tapahtumakäsittelijät: addEventListener(Event.ENTER_FRAME, onEnterFrame); addEventListener(Event.REMOVED_FROM_STAGE, onRemovedFromStage); } private function onRemovedFromStage(event:Event):void { //Poistetaan tapahtumakäsittelijät jos //tämä objekti poistetaan stagelta removeEventListener(Event.ENTER_FRAME, onEnterFrame); removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); removeEventListener(Event.REMOVED_FROM_STAGE, onRemovedFromStage); trace("Dungeon removed"); } private function onEnterFrame(event:Event):void { //1. } public function checkCollisionWithPlayer(wall:MovieClip) { if (player!=null) { Collision.block(player, wall); } } } }syntyy jotain tällaista: näytä
klikkaa kuvaa niin näppäin fokus aktivoituu
- tästä eteenpäin ohjeet liittyvät lisätehtäviin (koodi ei ole monisteessa)
- Tehtävä: lisää toinen ovi ja toinen avain ratkaisu
- Luo hahmo movieclipille GameOver tila (esim. jos häviää)
vinkki: luo hahmo mc:n omalla aikajanalla- uusi layer: labels layer
- avainkehys esim kohtaan 10
- framelabel nimi
- actions layer
- stop(); ekaan frameen
- luokan koodissa gameover kohdassa: player.gotoAndStop("kohdan3framelabelinnimi")
- piilotetaan rivi //parent.removeChild(this);
- mutta nyt ongelma: ohjelma alkaa jumittaa
- ratkaisu: ehkä täällä
- tehtävä: lisää jotain muuta, jota pelaaja voi noukkia vinkki: esim timantti: toiminto: kun pelaaja törmää timanttiin se katoaa pelikentältä. Toteutus: samanlainen luokka kun Wall mutta onEnterFrame funktio:
private function onEnterFrame(event:Event):void { if (MovieClip(parent).player.hitTestObject(this)) { trace("timantti löytyi"); MovieClip(parent).lisaaSaaliinLukumaaraa(); MovieClip(parent).removeChild(this); } } - pidetään kirjaa kerätyistä objekteista dynaamisessa tekstikentässä, jonka instanssin nimi saalisSaldo:
luokan alussa uusi muuttuja:
public class Sokkelo_taso1 extends MovieClip { var saalisSaldonLukum:int = 0; // enterFrame metodin jälkeen lisätään tällainen metodi: public function lisaaSaaliinLukumaaraa():void { saalisSaldonLukum++; trace("saalisSaldonLukum ", saalisSaldonLukum); saalisSaldo.text = saalisSaldonLukum+""; } - tutorial 04b