0

我正在制作一个游戏,其中屏幕上方的昆虫向下移动到底部。目标是让玩家用他/她的鼠标杀死这些昆虫。杀死昆虫后,应显示一个杀死框架,我已将其放入。杀死框架将在那里停留 3 秒钟,然后物体将被移除。这也将增加玩家的分数。

这段代码写在昆虫内部:

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

}

此代码写在背景影片剪辑帧内。

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);
}

我遇到的问题是,每当我点击昆虫时,它们都会呆在那里。我点击另一个它停留在那里。然后是另一个,过了一会儿它们消失了,分数增加了。有时死亡框架不会出现,我一碰它们就死了。你能告诉我如何解决这个问题吗?

4

1 回答 1

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 监听器中,所以每帧都会调用一次。像这里一样结合拼接和移动也消除了在其他地方放置移动代码的需要,因为无论如何都要遍历数组。

于 2013-10-16T04:42:28.490 回答