2014-02-25 189 views
0

我目前正在Flash中製作一個格鬥遊戲的小版本,但我不希望角色通過按住一個鍵持續點擊等等,而是要按下該鍵每次。這是我目前有:帶按鈕的單擊動作點擊

function moveChar(event:Event):void{ 
if(rightKeyDown && !hitting && !combo){ 
    hitting = true; 
    gotoAndPlay("basic_punch"); 
    kickbag.gotoAndPlay("hit1"); 
    countHits++; 
} 
if(downKeyDown && !hitting && !combo){ 
    hitting = true; 
    gotoAndPlay("basic_kick"); 
    kickbag.gotoAndPlay("hit1"); 
    countHits++; 
} 
if(downKeyDown && combo){ 
    gotoAndPlay("kick_combo1"); 
    kickbag.gotoAndPlay("hit2"); 
    kickbag.stop(); 
} 
if(rightKeyDown && combo){ 
    gotoAndPlay("punch_combo"); 
    kickbag.gotoAndPlay("hit2"); 
    kickbag.stop(); 
} 
} 

function checkKeysDown(event:KeyboardEvent):void{ 
    if(countHits == 2) bar.gotoAndStop("bar2"); 
    if(countHits == 6) bar.gotoAndStop("bar3"); 
    if(countHits == 10) { 
     bar.gotoAndStop("bar4"); 
     combo = true; 
     gotoAndPlay("combo_stand"); 
    } 
    if(event.keyCode == 39 || event.keyCode == 68){ 
     rightKeyDown = true; 
    } 
    else if(event.keyCode == 40 || event.keyCode == 83){ 
     downKeyDown = true; 
    } 
} 

function checkKeysUp(event:KeyboardEvent):void{ 
    if(event.keyCode == 39 || event.keyCode == 68){ 
     rightKeyDown = false; 
    } 
    else if(event.keyCode == 40 || event.keyCode == 83){ 
     downKeyDown = false; 
    } 
} 

但正如我所解釋的,這允許按鈕被按下。

回答

0

我認爲@Ribs是在正確的軌道上,但給你目前的代碼答案看起來很簡單。

刪除Event.ENTER_FRAMEmoveChar()並更改函數定義行,所以它看起來是這樣的:

function moveChar():void //e:Event removed from parameters 

然後checkKeysDown函數,調用moveChar()爲按下的鍵(您moveChar()評估無論如何布爾):

if(event.keyCode == 39 || event.keyCode == 68){ 
    rightKeyDown = true; 
    moveChar(); 
} 
else if(event.keyCode == 40 || event.keyCode == 83){ 
    downKeyDown = true; 
    moveChar(); 
} 

Now你可以改變,如果上述聲明使它多一點具體的:

if (!downKeyDown && !rightKeyDown) { 
    if(event.keyCode == 39 || event.keyCode == 68){ 
     rightKeyDown = true; 
     moveChar(); 
    } 
    else if(!downKeyDown && !rightKeyDown && (event.keyCode == 40 || event.keyCode == 83)){ 
     downKeyDown = true; 
     moveChar(); 
    } 
} 

這基本上是處理向下或向右按下鍵一次一個,和而那些正在運行無視一切。它也可以假設你可能不希望同時向下壓,右按鍵做任何事情,因此你可以這樣做:

function checkKeysDown(event:KeyboardEvent):void{ 
    if (downKeyDown || rightKeyDown) return; //do nothing, we are pressing a key 
    if(countHits == 2) bar.gotoAndStop("bar2"); 
    if(countHits == 6) bar.gotoAndStop("bar3");*/ 
    if(countHits == 10) { 
     bar.gotoAndStop("bar4"); 
     combo = true; 
     gotoAndPlay("combo_stand"); 
    } 
    if(event.keyCode == 39 || event.keyCode == 68){ 
     rightKeyDown = true; 
     moveChar(); 
    } 
    else if(event.keyCode == 40 || event.keyCode == 83){ 
     downKeyDown = true; 
     moveChar(); 
    } 
} 

這將返回在checkKeyDown功能,如果我們目前正在按向下或右鍵。我假設這可能是你想要的效果,所以你的計數器不會增加每個KEY_DOWN註冊。正如你可以看到你有一些選擇,並有多種方式來做到這一點。希望這提供了一些指導。

1

創建onKeyDown和onKeyUp監聽器。在onKeyDown監聽器中,關閉onKeyDown監聽器,執行操作並初始化onKeyUpListener。在onKeyUp偵聽器中,殺掉onKeyUp偵聽器並重新初始化onKeyDown偵聽器。

0

我也一直在玩平臺遊戲的Flash遊戲,下面是我如何完成一個乾淨的攻擊代碼:聲明一個「攻擊」布爾值來幫助決定角色是否可以攻擊。您可以通過創建一個輸入框架事件偵聽器來防止角色持續攻擊,該偵聽器可以檢查角色在攻擊過程中所處的角色。如果角色播放頭在動畫的最後一幀,而不是簡單地將攻擊布爾值設置爲假。