如何在前一个元素通过 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)
}
}
}
}
答案 0 :(得分:1)
您的代码已经正常运行并按您的要求执行操作。
代码看起来像文档类,但有一个小错误阻止它执行。你忘了package{...}
换行。
但你编译器应该说你这个,不是吗?
你是对的,使用范围可以为你提供一堆问题然后对象没有进入它,或者多次获得。
要解决此问题,您无法检查区域,只能检查myBox.x<= stage.stageWidth/2
条件。在对象满足此条件后,只需从用于检查的数组中删除元素,并将其添加到您检查的对象数组中,以便删除它们。
如果您不想创建另一个数组,可以为每个新Box添加一些属性。
例如 - passedCenter
并将其设置为false
。然后更改
if(myBox.x <= stage.stageWidth/2 && !myBox.passedCenter){
myBox.passedCenter=true;
//you stuff
}