在AS3中检测到碰撞时删除对象

时间:2013-09-21 12:05:05

标签: actionscript-3 flash collision removechild

我正在制作一个游戏,你的玩家(枪)射击敌人(坏人)以获得分数。我已经设置好让你有三条生命(生命),直到比赛结束。我正在尝试添加一个addLife函数,当你的播放器收集一个对象(waterMelon)时,它会生效。我添加了一个运行addLife函数的计时器事件,它每隔5秒就会向舞台添加一个Movie剪辑实例。在该函数中,我创建了另一个名为checkCollisions的函数,用于检查播放器与对象的碰撞,从舞台中移除对象,然后添加生命。

var timer2:Timer = new Timer(5000);

timer2.addEventListener(TimerEvent.TIMER, addLife);
timer2.start();
var watermelon:waterMelon = new waterMelon();

function addLife(evt:TimerEvent):void{
    watermelon.x = Math.random() * stage.stageWidth;
    watermelon.y = Math.random() * stage.stageHeight;

    addChild(watermelon);
    watermelon.push(waterMelon);

    checkCollision();
}

function checkCollision(){
    if (gun.hitTestObject(watermelon)){
    removeChild(watermelon);
    lives++;
    livesDisplay.gotoAndStop(livesDisplay.currentFrame-1);
    }
}

代码的唯一部分是将西瓜添加到舞台上,但是当我的播放器与它发生碰撞时,它不会从舞台上移除。有人可以告诉我当玩家与它碰撞时我是如何让我的西瓜完全从舞台上移走的,并为我的玩家增添生命。再一次,每个物体都等于此; =玩家, waterMelon =物体/西瓜,生命 =生命,生命显示 =生命的物理展示。< / p>

1 个答案:

答案 0 :(得分:0)

您试图从舞台而不是对象(waterMelon)中删除数组(西瓜)。虽然通过外观你使用数组,所以你必须找到与数组西瓜枪相撞的物体的索引。你用for循环来做到这一点。

for (melonCount:int = 0; melonCount>watermelon.length;melonCount--)
{
 if (gun.hitTestObject(watermelon[melonCount]))
 {
  removeChild(watermelon[melonCount])
  watermelon.splice(melonCount, 1)
  melonCount--
 }
}