2013-02-12 93 views
0

嗯問題是我在我的遊戲中遇到了麻煩。如果我使用KEY_DOWN事件和/或ENTER_FRAME,當我按住踢球或拳擊按鈕時,戰鬥機會不斷對敵人造成傷害,但我希望他可以踢,然後返回到靜止位置或踢,並能夠保持姿勢但只會造成一次傷害。這裏有一些代碼:戰鬥機遊戲as3,KeyboardEvent.KEY_DOWN問題

stage.addEventListener(KeyboardEvent.KEY_DOWN, enterAttack); 
stage.addEventListener(KeyboardEvent.KEY_UP, exitAttack); 
stage.addEventListener(Event.ENTER_FRAME, attackYes); 
stage.addEventListener(Event.EXIT_FRAME, attackNo); 

function enterAttack(evt:KeyboardEvent):void 
{ 
    if (evt.keyCode == 84) 
    { 
     attack = true; 
    } 
} 
function exitAttack(evt:KeyboardEvent):void 
{ 
    attack = false; 
} 
function attackYes(evt:Event):void 
{ 
    if (attack) 
    { 
     hero.gotoAndStop("punch1"); 

     checkHitRed(); 
     checkIfDead(); 
    } 
} 
function attackNo(evt:Event):void 
{ 
    if (!attack) 
    { 
     hero.gotoAndStop("still"); 
    } 
} 

我試圖刪除某處的聽衆,但總是讓它看起來像戰鬥機沒有做任何攻擊。

有什麼辦法可以防止按下踢/打按鈕嗎?

任何幫助表示讚賞

+0

你爲什麼不在'KeyboardEvent.KEY_UP'上執行命中?這自然會造成命中之間的延遲。 – Gio 2013-02-12 06:18:29

回答

0

你必須爲你的能力設計冷卻時間,例如, 「踢」每20幀只能發生一次。所以,當玩家按下踢按鈕時,char會踢,造成傷害並設置冷卻時間變量。輸入框架監聽器開始減少計數器,並且隨後的kick命令在冷卻時間被忽略時被忽略。

stage.addEventListener(KeyboardEvent.KEY_DOWN, enterAttack); 
stage.addEventListener(Event.ENTER_FRAME, enterFrame); 
var kickCooldown:int=0; 
function enterAttack(evt:KeyboardEvent):void 
{ 
    if (evt.keyCode == 84) 
    { 
     if (!kickCooldown) { 
      attack = true; 
      kickCooldown=15; 
     } 
    } 
} 
function enterFrame(evt:Event):void 
{ 
    if (attack) 
    { 
     hero.gotoAndStop("punch1"); 
     attack=false; // we have attacked once, now dealing damage 
     checkHitRed(); 
     checkIfDead(); 
    } 
    if (kickCooldown>0) kickCooldown--; // waiting for cooldown end 
    else hero.gotoAndStop("still"); // if ends, return hero to "still" posture 
} 
+0

謝謝你的快速回復,Vesper這正是我所需要的,非常感謝你! – 2013-02-12 12:33:31

0

字符狀態,分爲三種類型。如下。

stage.addEventListener(KeyboardEvent.KEY_DOWN, enterAttack); 
stage.addEventListener(KeyboardEvent.KEY_UP, exitAttack); 
stage.addEventListener(Event.ENTER_FRAME, onAction); 

var characterState:String = "wait" 
function enterAttack(evt:KeyboardEvent):void 
{ 
    if (evt.keyCode == 84) 
    { 
     characterState = "attack"; 
    } 
} 
function exitAttack(evt:KeyboardEvent):void 
{ 
    characterState = "attack_ended"; 
} 
function onAction(evt:Event):void 
{ 
    if(characterState == "wait") return; 

    if(characterState == "attack") 
    { 
     hero.gotoAndStop("punch1"); 

     checkHitRed(); 
     checkIfDead(); 
    } 
    else if(characterState == "attack_ended") 
    { 
     hero.gotoAndStop("still"); 
     //Revert to wait state after the attack termination . 
     characterState = "wait"; 
    } 
}