如何在前一个舞台上创建元素

时间:2013-12-03 19:32:46

标签: actionscript-3

如何在前一个元素通过 stage.stageWidth / 2

后添加新元素

除了我的方式(下面的代码,我创建一个元素只会传递一次的区域)

PS:我不想这样做,因为移动的速度会随着时间的推移而不同(它会慢慢上下移动)。像3到6一样,缓和因子为0.005

到目前为止,我有这个

import flash.display.MovieClip;
import flash.events.Event;

public class Main extends MovieClip
{

    private var myArray:Array = new Array();

    public function Main()
    {
        stage.addEventListener(Event.ENTER_FRAME, everyFrame)
        var item:Box = new Box();
        item.x = stage.stageWidth - 100
        item.y = 40
        addChild(item)
        myArray.push(item)
    }

    private function everyFrame(ev:Event):void
    {
        var myBox:Box
        for(var i:int = 0; i< myArray.length; i++)
        {
            myBox = myArray[i]
            myBox.x -=3
            if(myBox.x <= stage.stageWidth/2 && myBox.x >= stage.stageWidth/2 - 3)
            {
                trace("new Box")
                var myNewBox:Box = new Box()
                myNewBox.x = stage.stageWidth - 100
                myNewBox.y = 40
                addChild(myNewBox)
                myArray.push(myNewBox)
            }

            if(myBox.x < 0 )
            {
                removeChild(myBox)
                myArray.splice(i, 1)
                trace(myArray.length)
            }               
        }
    }

}

1 个答案:

答案 0 :(得分:1)

您的代码已经正常运行并按您的要求执行操作。 代码看起来像文档类,但有一个小错误阻止它执行。你忘了package{...}换行。 但你编译器应该说你这个,不是吗?

你是对的,使用范围可以为你提供一堆问题然后对象没有进入它,或者多次获得。 要解决此问题,您无法检查区域,只能检查myBox.x<= stage.stageWidth/2条件。在对象满足此条件后,只需从用于检查的数组中删除元素,并将其添加到您检查的对象数组中,以便删除它们。

如果您不想创建另一个数组,可以为每个新Box添加一些属性。 例如 - passedCenter并将其设置为false。然后更改

的if语句
if(myBox.x <= stage.stageWidth/2 && !myBox.passedCenter){
    myBox.passedCenter=true;
    //you stuff
}