Я новичок в языке AS3. Я хотел бы спросить, используется ли KeyboardEvent в as3 до тех пор, пока нажата клавиша?
Это создает мне проблемы при выполнении двойного прыжка для моего персонажа.
Вот часть моего кода:
var dbJump:Boolean=true;
var onGround:Boolean=false;
var Yvel:Number=0;
var keyUp:Boolean=false;
this.addEventListener(Event.ENTER_FRAME,Eframe);
stage.addEventListener(KeyboardEvent.KEY_DOWN,
kDown)
stage.addEventListener(KeyboardEvent.KEY_UP,
kUp)
function kDown(e:KeyboardEvent):void{
var key:uint=e.keyCode;
if(key==32){
keyUp=true;
}
}
function kUp(e:KeyboardEvent):void{
var key:uint=e.keyCode;
if(key==32){
keyUp=false;
}
}
function Eframe(e:Event):void{
Yvel++;
myChar.y+=Yvel;
while(ground.hitTestPoint(myChar.x,myChar.y,true)){
myChar.y--;
Yvel=0;
}
if(ground.hitTestPoint(myChar.x,myChar.y+3,true)){
onGround=true;
//if touching ground then return the dbJump to true;
dbJump=true;
else{
onGround=false;
if(!keyUp){
//if not on ground an not pressed space, dbJump
// still true
dbJump=true;
}
}
if(keyUp && dbJump && onGround){
Yvel=-12;
}
// if space pressed and not on the ground
else if(keyUp && dbJump && !onGround){
Yvel=-12;
//then say doublejump is completed
dbJump=false;
trace(dbJump);
}
}
, поэтому переменная dbJump сразу становится ложной при первом нажатии клавиши пробела, а не во втором нажатом промежутке времени. Я поставил трассировку, чтобы увидеть, сколько повторяется событие нажатия клавиши.
Так что суть в том, что dbJump сразу стал ложным, как только мой персонаж оторвался от земли. я еще не отпустил ключ. Я попытался быстро нажать и отпустить клавишу пробела, и она работает (поэтому я действительно уверен, что это потому, что повторяющееся утверждение «dbJump = false»).
Как это исправить?
Кроме того, я имею в виду, что если свойство dbJump имеет значение false, это означает, что нельзя снова прыгнуть / двойной прыжок завершен.