试图制作一个游戏,我躲避从天上掉下来的陨石。 AS3

时间:2014-05-30 02:15:12

标签: actionscript-3

我试图制作一个陨石从天而降的游戏......到目前为止,我已经有1次堕落和消失,但它并没有循环。如何使多个陨石在不同的位置下降并保持循环这是我的代码到目前为止

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

2 个答案:

答案 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()在新陨石出现之前暂停。