2013-10-16 218 views
0

我正在製作一個遊戲,屏幕上方的昆蟲向下移動到底部。對象是玩家用他/她的鼠標殺死這些昆蟲。殺死昆蟲時應該顯示一個殺戮框架,在那裏我已經投入。殺戮框架將在那裏停留3秒鐘,並且物體將被移除。這也會增加玩家的分數。我該如何解決這個問題?

此代碼被寫入該昆蟲內:

function kill(event:MouseEvent):void 
{ 
this.dead = true; 

} 

此代碼是背景的movieclip框內寫入。

function moveEnemies():void 
{ 
var tempEnemy:MovieClip; 

for (var i:int =enemies.length-1; i>=0; i--) 
{ 
    tempEnemy = enemies[i]; 
    if (tempEnemy.dead) 
    { 

     tempEnemy.gotoAndStop(21); 
     var myTimer:Timer = new Timer(3000); 
     myTimer.addEventListener(TimerEvent.TIMER, timerListener); 
     myTimer.start(); 
} 
} 
} 
function timerListener (e:TimerEvent):void 
{ 

for (var i:int =enemies.length-1; i>=0; i--) 
{ 
if (tempEnemy.dead) 
{ 
    score++; 
    roachLevel.score_txt.text = String(score); 
removeEnemy(i); 

} 


} 
} 
function removeEnemy(id:int) 
{ 

removeChild(enemies[id]); 
enemies.splice(id,1); 
} 

我遇到的問題是,每當我點擊它們留在那裏的昆蟲。我點擊另一個它停留在那裏。然後又一次,然後過了一段時間,他們消失,得分增加。有時死亡框架不會出現,只要我碰它們就會死亡。你能告訴我如何解決這個問題嗎?

+0

問題是你每3秒就會移除一次敵人。你應該這樣做,而不是點擊敵人。 – Pier

+0

請爲問題使用更具描述性的標題。 – LopSae

回答

0

您必須重新定位敵人職業的分數,併爲特定的擠壓敵人而不是基礎分配超時。最好的地方是在kill()函數。

function kill(e:MouseEvent):void { 
    this.dead=true; 
    gotoAndStop(21); 
    flash.utils.setTimeout(removeSelf,3000); 
} 
function removeSelf():void { 
    this.parent.removeChild(this); 
} 

現在,調整打分和跟蹤對象的機制。首先,如果一個對象變成了dead,你立即將它從敵人陣列中移除(它將自己處理它的移除)並給它分數。其次,所有其他功能都應該保留。

for (var i:int=enemies.length-1;i>=0;i--) { 
    var tempEnemy=enemies[i]; 
    if (tempEnemy.dead) { 
     score++; 
     enemies.splice(i,1); 
    } else { 
     tempEnemy.y++; // or other move function 
    } 
} 

此循環應該在一個enterframe監聽器中,所以它將在每幀調用一次。此外,像這裏一樣組合拼接和移動,無論如何您都可以在其他位置放置移動代碼,因爲您無論如何都會遍歷數組。