好的,所以我的主要問題在於閃存的KeyboardEvent
有點慢。比方說,我按下左箭頭。出於某種原因,運動會延遲然後移動。當我正在做雙跳或跳躍時,我不得不按下按鈕而不是單擊一次。我的問題是有沒有一種方法可以讓閃光燈檢測到任何按鍵的單次按下,以及如何解決keyCode的移動延遲問題?Flash As3按鍵問題
import flash.ui.Keyboard;
import flash.events.KeyboardEvent;
import flash.events.Event;
//Initialized variables
var theKey:KeyObject = new KeyObject(stage);//Help the stage checks for keypressed objects
var hspeed:Number = 0;// horizontal speed
var vspeed:Number = 0;// vertical speed
var gravity:Number = 2;//Gravity
var friction:Number = .5;//Friction
var ground:int = 800;//Bottom of the stage
var JumpMax:Number = 0;//Double jump
//All Booleans (Mainly player states)
var aDown:Boolean = false;//Press left key
var dDown:Boolean = false;//Press right key
var Jumped:Boolean = false;//Player in jumping state
var AttackMode:Boolean = false;//Player in attacking state
var CrouchMode:Boolean = false;//Player in crouched state
var RightSide:Boolean = false;//Player hitting right side of block
var LeftSide:Boolean = false;//Player hitting left side of block
var DownSide:Boolean = false;//Player hitting the top of block
var UpSide:Boolean = false;//Player hits bottom of block
ultraDaimyo.gotoAndStop("idleDaimyo");
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyYeet);
function keyYeet(e:KeyboardEvent):void
{
if(e.keyCode == Keyboard.D)
{
dDown = true;
}
if(e.keyCode == Keyboard.A)
{
aDown = true;
}
if(e.keyCode == Keyboard.C)
{
AttackMode = true;
}
if(e.keyCode == Keyboard.W || Jumped == true)
{
Jumped = true;
}
}
stage.addEventListener(KeyboardEvent.KEY_UP, keyNot);
function keyNot(e:KeyboardEvent):void
{
if(e.keyCode == Keyboard.D)
{
dDown = false;
}
if(e.keyCode == Keyboard.A)
{
aDown = false;
}
if(e.keyCode == Keyboard.C)
{
AttackMode = false;
}
if(e.keyCode == Keyboard.W)
{
Jumped = false;
}
}
stage.addEventListener(Event.ENTER_FRAME, gameCycle);
function gameCycle(e:Event):void
{
hspeed *= friction;
ultraDaimyo.x += hspeed;
ultraDaimyo.y += gravity;
if(AttackMode)
{
ultraDaimyo.gotoAndStop("attackDaimyo");
ultraDaimyo.x += 5;
if(ultraDaimyo.scaleX == -1)
{
ultraDaimyo.gotoAndStop("attackDaimyo");
ultraDaimyo.x -= 10;
}
}
if(Jumped == true)
{
ultraDaimyo.y -= 30;
ultraDaimyo.gotoAndStop("jumpDaimyo");
}
if(dDown)
{
hspeed += 20;
ultraDaimyo.gotoAndStop("runDaimyo");
ultraDaimyo.scaleX = 1;
}
if(aDown)
{
hspeed -= 20;
ultraDaimyo.gotoAndStop("runDaimyo");
ultraDaimyo.scaleX = -1;
}
if(!aDown && !dDown && !AttackMode && !Jumped)
{
ultraDaimyo.gotoAndStop("idleDaimyo");
}
if(ultraDaimyo.x - ultraDaimyo.width/2 < 0)//If the player goes past the left side
{
ultraDaimyo.x = ultraDaimyo.width/2;
}
if(ultraDaimyo.x + ultraDaimyo.width/2 > 1400)//If the player goes past right
{
ultraDaimyo.x = 1400 - ultraDaimyo.width/2;//Player cant go past
}
if(ultraDaimyo.y + ultraDaimyo.height/2 < floor && Jumped)//If we are above the floor
{
if(Jumped)
{
ultraDaimyo.gotoAndStop("jumpDaimyo");
}
gravity++;//Accelerate gravity in the process
}
if(ultraDaimyo.y + ultraDaimyo.height/2 > floor)
{
Jumped = false;//If we are on the floor then we're not jumping
gravity = 0;//Gravity can no longer be applied
ultraDaimyo.y = floor - ultraDaimyo.height/2;//Player sits on top of the floor
}
}
答案是肯定的。如果您想要比這更好的答案,請編輯您的問題並顯示您當前的代碼,以便有人可以指出您的延遲來自哪裏。 – BadFeelingAboutThis
更新:我在這裏添加了我的角色Daimyo的完整代碼。現在問題是鍵盤事件本身。 keyCode只是在短暫的時間內延遲,然後進行移動。此外,我仍然想知道as3是否只能檢測到印刷機而不是持有。謝謝! – user199845
「按下」意味着什麼?本質上'KEY_UP'事件就相當於一臺印刷機。你的代碼看起來不錯,如果我不得不猜測,你的延遲來自你的'gotoAndStop'而不是事件本身。嘗試在你的按鍵處理程序('keyYeet')中放置一條跟蹤語句並查看該跟蹤是否立即觸發,而不管你在時間軸上看到的是什麼。 – BadFeelingAboutThis