hitTestObject并不适用于名副其实的

时间:2015-09-16 22:56:10

标签: actionscript-3

当它击中舞台底部的球时,用if (bomb1.hitTestObject(ball)) {试图使炸弹爆炸时爆炸。但是当炸弹击中其中一个球时没有发生任何事情。它适用于放置在舞台上而不是球上的其他物体。ball是一个变量,用于在舞台底部随机散布的8个球。

import flash.events.Event;
bomb1.gotoAndStop(1);

var minLimit: int = 31;
var maxLimit: int = 42;
var range: int = maxLimit - minLimit;

var balls: Array = [],
  ball: bomb30a;

for (var i: int = 0; i < 8; i++) {
  ball = new bomb30a();
  ball.x = 150 + i * (Math.ceil(Math.random() * range) + minLimit);
  ball.y = 350;
  balls.push(ball);
  addChild(ball);
}
thisButton.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);

function fl_MouseClickHandler(event: MouseEvent): void {
  bomb1.gotoAndPlay(1);
  this.addEventListener(Event.ENTER_FRAME, handleCollision);
}
function handleCollision(evt: Event): void {
if (bomb1.hitTestObject(ball)) {
  this.removeEventListener(Event.ENTER_FRAME, handleCollision);
  bomb1.stop();
  bomb1.bomb2.gotoAndPlay(31);

  }
}
stop();

1 个答案:

答案 0 :(得分:0)

你正在制作8个bomb30a对象,但你继续将它们分配给同一个变量ball。这意味着ball将在您的循环后引用最后一个 。因此,当你执行hitTest时,它只检查你创建的最后一个球。您将需要循环遍历balls数组,并分别在每个数据上尝试hitTest,如...

for ( var i:int = 0; i < balls.length; ++i )
{
    if ( bomb1.hitTestObject( balls[i] ) )
    {
        ...
    }
}