2013-10-16 156 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监听器中,所以它将在每帧调用一次。此外,像这里一样组合拼接和移动,无论如何您都可以在其他位置放置移动代码,因为您无论如何都会遍历数组。