我该如何解决这个问题?

时间:2013-10-16 04:15:32

标签: actionscript-3 flash-cs4

我正在制作一个游戏,屏幕上方的昆虫向下移动到底部。对象是玩家用他/她的鼠标杀死这些昆虫。当被杀死时,昆虫应该显示一个杀戮框架,我已经放入。杀死框架将在那里停留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);
}

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

1 个答案:

答案 0 :(得分: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侦听器中,因此每帧将调用一次。此外,在此处组合拼接和移动消除了在其他地方放置移动代码的需要,无论如何都要遍历数组。