OVLADANIE KLAVESNICOU S DETEKCIOU KOLIZIE as3 |
Tento tutoriál ukazuje základné princípy ovládania movieclipu na scéne klávesnicou spolu s detekciou kolízie dvoch movieclipov. Užitočné hlavne pre hry ale samozrejme použiteľné aj pre iné funkcie a nápady.
Tento príklad funguje so šípkami na klávesnici. Tieto tlačidlá na klávesnici možno jednoducho zmenit len prepísaním keyCode v podmienkach. Tieto kódy pre jednotlivé tlačidlá klávesnice sa dajú veľmi jednoducho vyhľadať na internete. Na konci by ste mali dostať niečo podobné ako toto:
Otvorte actionscript 3.0 flash dokument. Nakreslite 4 čiary ktoré budú reprezentovať steny, prekážky atď. a skonvertujte ich na 4 movieclipy. Do koloniek instance name napíšte right, left, top, bottom. Umiestnite ich na scéne
ako uznáte za vhodné. Teraz vložte dynamické textové pole na scénu a nazvite ho output. Teraz nakreslite objekt ktorý chcete ovládať šípkami. Skonvertujte ho na movieclip. Vnútri tohto movieclipu pridajte ďalšie 4 keyframy.Môžete ich upraviť ako chcete.
Tie budú reprezentovať pohyb v určitom smere. Pomenujte tento movieclip stickman. Otvorte actions okno a vložte tento actionscript kód:
var hittest:Boolean = false; stage.addEventListener(KeyboardEvent.KEY_UP, keyUP); function keyUP(e:KeyboardEvent){ stickman.gotoAndStop(1); hittest = false; } stage.addEventListener(KeyboardEvent.KEY_DOWN, detectKey); function detectKey(event:KeyboardEvent):void { output.text=("The keypress code is: " + event.keyCode)+"\n"+ ("The x location is: " + stickman.x)+"\n"+ ("The y location is: " + stickman.y)+"\n"+ ("Hit test: " + hittest ); if (event.keyCode==(Keyboard.LEFT)) { stickman.x=stickman.x-5; stickman.gotoAndStop(2); } else if (event.keyCode==(Keyboard.UP)) { stickman.y=stickman.y-5; stickman.gotoAndStop(4); } else if (event.keyCode==(Keyboard.RIGHT)) { stickman.x=stickman.x+5; stickman.gotoAndStop(3); } else if (event.keyCode==(Keyboard.DOWN)) { stickman.y=stickman.y+5; stickman.gotoAndStop(5); } } stickman.addEventListener(Event.ENTER_FRAME, cellHit); function cellHit(event:Event):void { if (stickman.hitTestObject(right)) { stickman.x = stickman.x -5; hittest = true; }else if (stickman.hitTestObject(left)) { stickman.x = stickman.x +5; hittest = true; }else if (stickman.hitTestObject(top)) { stickman.y = stickman.y +5; hittest = true; }else if (stickman.hitTestObject(bottom)) { stickman.y = stickman.y -5; hittest = true; } }
Na prvom riadku je premenná do ktorej sa ukladá či šípka narazila do niektorej so stien. Riadky 2-6 resetujú movieclip šípky a hit premennú ak žiadne tlačidlo klávesnice nieje stlačené. Riadok 9
zisťuje či niektoré tlačidlo klávesnice je stlačené a potom spustí detectKey funkciu. Táto funkcia najprv pošle niake zaujímavé informácie do textového poľa na scéne. Táto funkcia je nepotrebná pre fungovanie zvyšku. If podmienky v tejto funkcii
hýbu movieclipom šípky na základe toho ktorá , v tomto prípade, šípka bola stlačená a posunie pohybujúci sa movieclip na zodpovedajúci frame a smer. Riadok 31 zisťuje či nastala kolízia objektov na scéne. cellHit funkcia zisťuje či stickman
movieclip narazil do niektorej so 4 stien na scéne. Ak je to pravda, zastaví pohyb šípky v tomto smere a resetuje movieclip tejto šípky a hittest premennú.
|