0

我正在制作一个游戏,昆虫从屏幕顶部落下,用户必须杀死它们。昆虫排成一列。每次用户杀死它们,分数就会上升..一段时间后,昆虫变得越来越快。当它们变得更快时,其中一些不会在您单击它们时被杀死。你必须点击多次才能让他们死去。我希望他们一键被杀死,但是当他们变得更快时这不起作用!

  function makeEnemies():void
   {
var chance:Number = Math.floor(Math.random() * 150);
if (chance <=  + level)
{


    //Make sure a Library item linkage is set to Enemy...
    tempEnemy = new Enemy();
    //Math.random(); gets a random number from 0.0-1.0
    tempEnemy.x = Math.round(Math.random() * 1000);
    addChild(tempEnemy);
    enemies.push(tempEnemy);
    tempEnemy.speed = enemyBaseSpeed + ((level - 1) * speedLevelInc);
}
}


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


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



     else // Enemy is still alive and moving across the screen
    {
        //rotate the enemy between 10-5 degrees
        tempEnemy.rotation += (Math.round(Math.random()*.4));
        //Find the rotation and move the x position that direction
        tempEnemy.x -=  (Math.sin((Math.PI/180)*tempEnemy.rotation))*tempEnemy.speed;
        tempEnemy.y +=  (Math.cos((Math.PI/180)*tempEnemy.rotation))*tempEnemy.speed;
        if (tempEnemy.x < 10)
        {
            tempEnemy.x = 11;
        }
        if (tempEnemy.x > stage.stageWidth - offset)
        {
             tempEnemy.x = stage.stageWidth - offset;
        }
        if (tempEnemy.y > stage.stageHeight)
        {
            removeEnemy(i);

            lives--;
            roachLevel.lives_txt.text = String(lives);
        }
    }
}
}

function removeEnemy(id:int)
{

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

昆虫内部也有代码。

import flash.events.MouseEvent;
import flash.display.MovieClip;
import fl.motion.Animator;
import flash.events.*;
play();
var MainTimeLine = MovieClip(root);
var mysound:squish = new squish(); 
this.addEventListener(MouseEvent.CLICK, kill);
this.dead = false;

function kill(e:MouseEvent):void 
{
this.dead=true;
mouseChildren=false
mysound.play();
gotoAndPlay(21);
this.removeEventListener(MouseEvent.CLICK, kill);
flash.utils.setTimeout(removeSelf,2000);

}

function removeSelf():void
{
this.parent.removeChild(this);
}
4

3 回答 3

0

迭代时不应从数组中删除能量。
你让敌人.splice(i,1); 在你的循环中从enemy.length 迭代到0。当你改变你的数组大小时,你不会调整循环条件。

于 2013-11-09T18:43:33.340 回答
0

我认为您的主要问题可能是您正在重复使用昆虫,也许是汇集它们。如果这样做,则需要确保在回收时再次为单击添加 eventListener。

如果您在构造函数中添加侦听器,则只会在创建昆虫时执行,而不是在回收它时执行。

于 2013-11-09T19:16:40.813 回答
0

您的问题是导致内存泄漏的 setTimeOut()。使用计时器更安全,但如果必须使用它,请保留对调用的引用并在不再需要时清除它。

此外,您发布的代码没有显示您将侦听器添加到 MainTimeline 或父级的位置,但如果您需要在昆虫被垃圾收集之前将其删除。

于 2013-11-09T21:18:16.140 回答