2014-03-29 34 views
0

我正在製作一款自上而下的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; 
    } 

} 
+0

hrm,也許你錯過了onKeyRelease()處理程序中的'case Keyboard.SPACE'? – mitim

+0

我已經嘗試過,但仍然會產生相同的結果。我的語法或結構不正確?我對動作仍然很陌生。我已經添加了keySPACE:handleAttack();在keyUp處理程序下,但沒有任何更改。我是否需要每個攻擊方向的布爾觸發器,還是我的方法不正確? – Jdrumm

+0

是否可以在keyUp處理函數中刪除函數調用?例如:在keyUp下我會有: – Jdrumm

回答

0

我還挺新的自己,但我想這是因爲這兩個onkeypress事件()和onKeyRelease()指向相同的功能handleAttack(),併爲這樣的點,甚至當你釋放相同的幀。嘗試爲每個人製作兩個獨立的攻擊功能。

e.g attackPressed()用於onkeypress事件()

function attackPressed():void 
{   
    switch (moving) 
    { 
     case 1: character.gotoAndStop(9); movingDown = false; break;  
     case 2: character.gotoAndStop(10); movingUp = false; break;  
     case 3: character.gotoAndStop(11); movingLeft = false; break;  
     case 4: character.gotoAndStop(12); movingRight = false; break;  
    } 
} 
爲onKeyRelease

和attackRelease()()

function attackRelease():void 
{ 
    switch (moving) 
    { 
     case 1:character.gotoAndStop(1); movingDown = false; break; 
     case 2:character.gotoAndStop(3); movingUp = false; break; 
     case 3: character.gotoAndStop(5); movingLeft = false; break; 
     case 4: character.gotoAndStop(7); movingRight = false; break; 
    } 
} 

希望這有助於。

+0

感謝您的回覆,Sb1985m。我應該早些時候更新這個問題,但是,這正是我所做的修復它。我原本沒有看到這個,我感到很愚蠢。我一直盯着屏幕太久。它只是在發佈時調用相同的函數。考慮我慚愧。我只編程了大約三個月。我發現編程和對最初實際學習平面設計的代碼的熱愛,現在我將學習更多的計算機科學課程,更具體地講是Java課程。我要去追求網站開發的主人。 – Jdrumm

+0

我是新來的堆棧溢出,你有機會知道我會去哪裏給你信用回答它,因爲你花時間幫忙嗎? – Jdrumm

+0

Nevemind,我相信我給了你答案的答案,只要在答案本身旁邊點擊那個複選標記即可。讓我知道你是否有信用。我只想公平。再次感謝。 – Jdrumm