var randomX:Number = Math.random() * 400;
test_mc.x = randomX;
test_mc.y = 0;
var speed:Number = 10;
test_mc.addEventListener(Event.ENTER_FRAME, moveDown);
function moveDown(e:Event):void
{
e.target.y += speed;
if(e.target.y >= 500
)
{
test_mc.removeEventListener(Event.ENTER_FRAME, moveDown);
}
}
答案 0 :(得分:1)
不要使用一个test_mc对象,而是定义一个Array和一个计数器变量来跟踪应该添加新的Meteorite的时间:
var meteorites:Array = new Array();
var counter:int = 0;
不是将事件监听器添加到单个陨石中,而是将事件监听器添加到舞台并让它触发游戏循环:
stage.addEventListener(Event.ENTER_FRAME, gameLoop);
function gameLoop(e:Event):void {
counter ++;
if (counter>=10) { // this will add a new Meteorite every 10 frames
counter = 0;
meteorites.push(new Meteorite());
addChild(meteorites[meteorites.length-1]);
// you could add code here to position the new Meteorite (meteorites[meteorites.length-1]) randomly in the X direction
}
if (meteorites.length>0) {
for (var loop:int=meteorites.length-1;loop>=0;loop--) {
meteorites[loop].y += speed;
if (meteorites[loop].y>500) {
removeChild(meteorites[loop]);
meteorites.splice(loop, 1) // this removes the meteorite at index [loop] from the Array
}
}
}
}
要使其工作,您必须启用陨石MovieClip for actionscript(在库属性/高级面板中),并为其命名为Meteorite。
修改强> 我添加了“addChild'和' removeChild'显示你的陨石所需的电话。此外,您不需要在Flash舞台上放置任何陨石。此代码将为您添加游戏内容。
答案 1 :(得分:0)
使用数组或向量(更好)(或者甚至可以创建自己的链表类,或者通过阶段/精灵的子项循环)来访问所有现有的陨石。在每个帧中循环遍历数组/向量/列表以使它们移动并处理冲突。计算帧数或使用Math.random()在新陨石出现之前暂停。