Actionscript 3 为什么我的阵列电影剪辑变得更快时更难点击?

Actionscript 3 为什么我的阵列电影剪辑变得更快时更难点击?,actionscript-3,flash,Actionscript 3,Flash,我正在制作一个游戏,其中昆虫从屏幕顶部下来,用户必须杀死它们。昆虫排成一列。每次用户杀死它们,得分都会上升。过了一段时间,昆虫的速度越来越快。当它们变得更快时,当你点击它们时,它们中的一些不会被杀死。您必须多次单击才能使其死亡。我希望他们在一次点击中被杀死,但当他们变得更快时,这是行不通的 function makeEnemies():void { var chance:Number = Math.floor(Math.random() * 150); if (chance <=

我正在制作一个游戏,其中昆虫从屏幕顶部下来,用户必须杀死它们。昆虫排成一列。每次用户杀死它们,得分都会上升。过了一段时间,昆虫的速度越来越快。当它们变得更快时,当你点击它们时,它们中的一些不会被杀死。您必须多次单击才能使其死亡。我希望他们在一次点击中被杀死,但当他们变得更快时,这是行不通的

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

您不应该在迭代数组时从数组中删除enermy。

你会树敌。剪接(i,1);在循环中从0.length迭代到0。当你改变你的数组大小时,你不会调整循环条件。

我认为你的主要问题可能是你在重复使用你的昆虫,可能是把它们集中起来。如果执行此操作,则需要确保为循环使用时再次单击添加eventListener


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

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


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

我怀疑内存泄漏。敌人有代码吗?我看不到任何你正在听的东西。你的removeEnemy()函数是什么样子的?嗯,让我在问题中发帖,我有敌人.splice,但我不明白应该在哪里添加另一个代码来消除延迟。我的意思是,这个游戏运行得非常完美,只是当它们变得更快时,点击就变得更加困难。从你的评论和代码中听起来,你没有昆虫类,但代码在库符号中-在它的时间线上。我怀疑还有更多我们看不到的代码在这个问题上起作用,可能还有其他问题。例如,运行时错误可能导致我们“假定”正在执行的行不执行。您是否收到任何运行时错误?是的,代码在库中的昆虫中。我没有收到任何运行时错误,代码工作正常,但当昆虫速度加快时,单击的准确性会变得更高,即使我确实单击了它们,如果不看到实际情况,我真的无法再为您提供帮助。fla我们当前使用的过程效率不高,因为它可能是我们没有看到的,这是主要问题。例如,我甚至不知道你在其他帧上是否有该昆虫的代码。有许多未知因素可能导致问题。我不知道那只昆虫的第21帧是什么。在某处张贴.fla。否则,这就相当于编程中的字谜游戏。
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);
}