Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何使对象在某一点消失为3_Actionscript 3_Enterframeevent - Fatal编程技术网

Actionscript 3 如何使对象在某一点消失为3

Actionscript 3 如何使对象在某一点消失为3,actionscript-3,enterframeevent,Actionscript 3,Enterframeevent,我有一个叫做food的电影剪辑,我把它放在一个叫做foodArray的数组中。它有自己的类(名为Mover),使每种食物向右移动。当它到达某一点时,食物就会消失 这是我在主类中输入的使食物消失的代码。我把这个放在中间的框架上 var l:int = foodArray.length - 1; while ((l > -1)) { if (foodArray[l].x > 1020) { removeChild(foodArray[l]);

我有一个叫做food的电影剪辑,我把它放在一个叫做foodArray的数组中。它有自己的类(名为Mover),使每种食物向右移动。当它到达某一点时,食物就会消失

这是我在主类中输入的使食物消失的代码。我把这个放在中间的框架上

var l:int = foodArray.length - 1;
while ((l > -1))
{
    if (foodArray[l].x > 1020)
    {
        removeChild(foodArray[l]);
        foodArray.splice(l,1);
    }
    l = l - 1;
}
这是Mover类

public function Mover(inputMC:MovieClip, xV:Number)
{
    this.insMC = inputMC;
    this.xVel = xV;
}
public function startMove():void
{
    this.insMC.addEventListener(Event.ENTER_FRAME, this.updatePos);
}
protected function updatePos(e: Event):void
{
    this.insMC.x +=  this.xVel;
}
public function stopMove():void
{
    this.insMC.removeEventListener(Event.ENTER_FRAME, this.updatePos);
}
食物消失得很好,但是有些食物即使在它应该消失的那一点之后仍然继续存在。 我猜问题在于数组长度,但我不能确定。非常感谢您的帮助。:)

这是我做前十一道菜的地方。所以我有一部叫做《食物》的电影,在每个时间轴上有六张不同的照片。我想随便做一排食物

function showFood()
{
    const ROW = 11;
    for (foodSeq = 0; foodSeq < ROW; foodSeq++)
    {
        randomFood = Math.ceil(Math.random() * 6);
        food = new Food();
        food.gotoAndStop(randomFood);
        food.x = 1010 - (84 * (foodSeq % ROW));
        food.y = 675;
        addChild(food);
        foodArray.push(food);
        food.sequence = foodSeq;
        food.code = randomFood;
        food.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
        //mover
        mover = new Mover(food,XVEL);
        moverArr.push(mover);
        mover.startMove();
    }
    addFood();
}
这是触发addFood功能的计时器

function timerForFood(t: TimerEvent)
{
    if (timerFood.currentCount > 2)
    {
        addFood();
    }
}

我会做一些改变。首先,您可以从
Mover
中删除事件侦听器,并从while循环中调用update方法,这样您就不必有多个enter-frame侦听器(因为我看不到您删除任何侦听器,我假设您有大量内存泄漏)

我还想跳过这个反向循环,因为它很难看,并且使代码更难理解:)虽然它稍微快一点,但这并不重要,除非数组中有成千上万的项

for (var i:int = 0; i<foodArray.length; i++) {
    var food:Mover = foodArray[i];
    food.updatePos(); // Remove the parameters from the updatePos method, since you're not using it any more.
    if (food.x > 1020) {
        foodArray.splice(i,1);
        i--;
    }
 }

for(var i:int=0;i您在哪里添加到foodArray?请发布该代码。我已经编辑了我的问题,您可以在那里看到代码。
for (var i:int = 0; i<foodArray.length; i++) {
    var food:Mover = foodArray[i];
    food.updatePos(); // Remove the parameters from the updatePos method, since you're not using it any more.
    if (food.x > 1020) {
        foodArray.splice(i,1);
        i--;
    }
 }