Volledige versie bekijken : Beweeg movie clips met toetsen
Opdonder
%Europe/Berlin %014 %2009, 01:20
Ben sinds kort begonnen met flash en as. Nu loop ik veel tutorials af en kom daar vaak as2 tegen.
Nu dacht ik is, laat ik van die as2 proberen as3 te maken zodat het wel werkt, dermiddel van deze tutorial (http://www.flash-game-design.com/flash-tutorials/movOb-flash-tutorial.html).
Maar nu zit ik vast op telkens het zelfde probleem:
** error ** 1195: Attempted access of inaccessible method KEY_DOWN through a reference with static type Class.
import flash.events.Event;
import flash.events.KeyboardEvent;
var speed = 5;
this.addEventListener(KeyboardEvent.KEY_DOWN,Press Key);
function PressKey(event:Event):void {
if (KeyboardEvent.KEY_DOWN (Keyboard.DOWN)){
square.DisplayObject.y -=speed;
}
if (KeyboardEvent.KEY_DOWN(Keyboard.UP)) {
square.DisplayObject.y +=speed;
}
if (KeyboardEvent.KEY_DOWN(Keyboard.LEFT)) {
square.DisplayObject.x -=speed;
}
if (KeyboardEvent.KEY_DOWN(Keyboard.RIGHT)) {
square.DisplayObject.x +=speed;
}
};
Batsiaan
%Europe/Berlin %380 %2009, 10:07
Dat gaat helaas niet werken in AS3.
Volgens mij werkt dat script niet eens zoals het behoort in AS2 aangezien je het script niet in een onEnterFrame functie draait.
In AS3 is dit een simpele manier om het te doen:
//de booleans heb je nodig om op te slaan welke knop is ingedrukt
var rightDown:Boolean=false;
var leftDown:Boolean=false;
var upDown:Boolean=false;
var downDown:Boolean=false;
var speed:Number=8;
//als eerst maak een een eventlistener welke onenterframe gebruikt.
//onenterframe voert de functie waar je deze aan koppelt zo vaak uit als de fps van je fla.
//dus als je 24 fps hebt ingesteld, voert de onenterframe de functie die je eraan koppelt 24x per seconde uit.
addEventListener(Event.ENTER_FRAME, onEnterFrame);
//vervolgens koppelen we een KEY_DOWN en KEY_UP evenListener aan onze stage. Deze kijkt globaal of er een knop ingedrukt of losgelaten word.
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
//gekoppeld aan de KEY_DOWN eventlistener. registreert welke specifieke knop is ingedrukt en slaat deze op in de variabele
function keyDownHandler(e:KeyboardEvent):void {
if (e.keyCode==37) {
leftDown=true;
}
if (e.keyCode==38) {
upDown=true;
}
if (e.keyCode==39) {
rightDown=true;
}
if (e.keyCode==40) {
downDown=true;
}
}
//registreren welke knop is losgelaten en dan opslaan
function keyUpHandler(e:KeyboardEvent):void {
if (e.keyCode==37) {
leftDown=false;
}
if (e.keyCode==38) {
upDown=false;
}
if (e.keyCode==39) {
rightDown=false;
}
if (e.keyCode==40) {
downDown=false;
}
}
//Deze functie zorgt ervoor dat je square beweegt. De functie is aan de onEnterFrame Listener gekoppeled.
//Zodra je bijv: de linkermuisknop indrukt is de leftDown variabele true, en wanneer deze true is gaat hij (als je framerate bijvoorbeeld 24 is) dit 24x per seconde uitvoeren.
//En afhankelijk van je fps en speed krijg je dan een mooie vloeiende beweging.
function onEnterFrame(event:Event):void {
if (leftDown==true) {
square.x-=speed;
}
if (upDown==true) {
square.y-=speed;
}
if (rightDown==true) {
square.x+=speed;
}
if (downDown==true) {
square.y+=speed;
}
}
Misschien is het iets teveel om in 1x te begrijpen, weet verder niet hoe goed je de basis van actionscript snapt.
Stel gerust vragen.
Opdonder
%Europe/Berlin %415 %2009, 10:58
Erg prettig uitgewerkt! En door die comments begrijp ik het nog wel redelijk. Had alleen nog wel een vraag:
if (e.keyCode==39) {
rightDown=false;
}
wat zegt die ==39? Of 37 of 38 etc. staan die geregistreerd als toets?
Of komt dat door de variabele dan?
Batsiaan
%Europe/Berlin %435 %2009, 11:26
Nee klopt, die staan geregistreerd als toets. 37 t/m 40 zijn de pijltjestoetsen.
Dus heel letterlijk: hij luistert af of er een toets ingedrukt word, en zodra de keyCode van de toets overeen komt met de keyCode die je aangeeft, voert hij het commando uit. In dit geval is dat commando de variabele rightDown naar false veranderen.
zie deze link voor alle keyCodes: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/ui/Keyboard.html
Opdonder
%Europe/Berlin %679 %2009, 17:17
Nou dank je wel, het is me in ieder geval een stuk duidelijker!
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.