我正在製作一款自上而下的RPG風格的遊戲,非常適合塞爾達。這是基於鍵盤控件的移動控件的代碼。運動本身非常穩固,沒有口吃症候羣,所有動畫都被正確觸發。然而,當按下攻擊按鈕(在這種情況下爲空格)時,它觸發適當的框架,但是當釋放按鍵時,相應的框架仍然可見,直到按下另一個方向鍵。所以,當你攻擊它時,看起來他保持了他的劍延伸到另一個運動,等等。只有在按下鍵時纔會發生這種情況,而不是簡單地按下鍵。這不是預期的結果。我期待的結果是每次按下按鍵時觸發的攻擊,創建正常按鈕=攻擊,按鈕=不攻擊。AS3遊戲開發:攻擊動作沒有跟隨移動方向
現在攻擊和移動都是基於變量move:int = 4;這樣我可以將攻擊位置切換到相應的移動方向。
有關如何解決此問題的任何想法?
import flash.events.Event;
import flash.events.KeyboardEvent;
character.stop();
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPress);// when key is pressed
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyRelease);//when key is released
stage.addEventListener(Event.ENTER_FRAME, MainLoop);
var moving:int = 4;
var movingDown:Boolean = false;
var movingUp:Boolean = false;
var movingRight:Boolean = false;
var movingLeft:Boolean = false;
function onKeyPress(e:KeyboardEvent):void
{
switch (e.keyCode)
{
case Keyboard.DOWN : movingDown = true; moving = 1; break;
case Keyboard.UP : movingUp = true; moving = 2; break;
case Keyboard.RIGHT : movingRight = true; moving = 3; break;
case Keyboard.LEFT : movingLeft = true; moving = 4; break;
case Keyboard.SPACE : handleAttack(); break;
}
}
function onKeyRelease(e:KeyboardEvent):void
{
switch (e.keyCode)
{
case Keyboard.DOWN: character.gotoAndStop(1); movingDown=false; moving = 1; break;
case Keyboard.UP: character.gotoAndStop(3);movingUp=false; moving = 2; break;
case Keyboard.LEFT: character.gotoAndStop(5);movingLeft=false; moving = 3; break;
case Keyboard.RIGHT: character.gotoAndStop(7);movingRight=false; moving = 4; break;
case Keyboard.SPACE: handleAttack(); break;
}
}
function handleAttack():void
{
switch (moving)
{
case 1: character.gotoAndStop(9); movingDown = false; break; //down
case 2: character.gotoAndStop(10); movingUp = false; break; //up
case 3: character.gotoAndStop(11); movingLeft = false; break; //left attacks
case 4: character.gotoAndStop(12); movingRight = false; break; //right
}
}
function MainLoop(e:Event):void
{
switch (true)
{
case movingDown: character.gotoAndStop(2); character.y+=4.5; break;
case movingUp: character.gotoAndStop(4); character.y-=4.5; break;
case movingLeft: character.gotoAndStop(6); character.x-=4.5; break;
case movingRight: character.gotoAndStop(8); character.x+=4.5; break;
}
}
hrm,也許你錯過了onKeyRelease()處理程序中的'case Keyboard.SPACE'? – mitim
我已經嘗試過,但仍然會產生相同的結果。我的語法或結構不正確?我對動作仍然很陌生。我已經添加了keySPACE:handleAttack();在keyUp處理程序下,但沒有任何更改。我是否需要每個攻擊方向的布爾觸發器,還是我的方法不正確? – Jdrumm
是否可以在keyUp處理函數中刪除函數調用?例如:在keyUp下我會有: – Jdrumm