0

我有一个数组中的项目,每个都是一个动画剪辑,它以 1 秒的延迟间隔播放,一个由箭头键控制的目标动画剪辑(carTarget),其目的是避免与数组项(obstacleArray [i])发生冲突。我一直在尝试创建一个 hitTestObject 语句以在发生碰撞时进行通知。但是我收到了诸如参数 hitTestObject 大多数是非空的错误并且无法弄清楚如何解决它。

//obstacles
function randomSort(a:*, b:*):Number
{
    if (Math.random() < 0.5) return -1;
    else return 1;
}
var obstacleArray:Array = [obstacleCar,obstacleCar2,obstacleCar3];
obstacleArray.sort(randomSort);

trace(obstacleArray);
trace(obstacleArray.length);

//OBSTACLE START DELAY
var timerPlay:Timer = new Timer(1000,1);
timerPlay.addEventListener(TimerEvent.TIMER, ontimerPlay);
timerPlay.start();

var i:int = 0;
var timerDelay:Timer = new Timer(1000, 3);
function ontimerPlay(evt:TimerEvent):void{

    obstacleArray[i].addEventListener(Event.ENTER_FRAME,checkHitTest);    
    //FOR EACH OBSTACLE
    timerDelay.addEventListener(TimerEvent.TIMER, ontimerDelay);
    timerDelay.start();
}

function checkHitTest(event:Event):void{
        if(carTarget.hitTestObject(obstacleArray[i]))
        {
            trace("HIT!");
        }
}

function ontimerDelay(evt:TimerEvent):void{
    obstacleArray[i].play();
    trace(obstacleArray[i]);
    i++;
}
4

2 回答 2

0

在您尝试使用它时,很可能 hitTestObject 不存在。从您共享的代码中,我看不到您在代码中创建它的位置。因此,假设 carTarget 是舞台上的一个对象,并且在您想要使用它时它具有属性或对象 hitTestObject 已初始化 - 假设这些东西,那么您需要确保当此代码运行时,该对象仍然存在。

于 2013-02-16T16:43:41.830 回答
0

很可能,问题出在这段代码中:

function checkHitTest(event:Event):void{
        if(carTarget.hitTestObject(obstacleArray[i]))
        {
            trace("HIT!");
        }
}

在 i 随计时器调用发生变化后, barrierArray[i] 将为 null 或更糟 - 另一个对象不是您需要检查的对象。

您应该将其更改为:

function checkHitTest(event:Event):void{
        if(carTarget.hitTestObject(event.target))
        {
            trace("HIT!");
        }
}

event.target 将从 Enterframe 事件中调用 checkHitTest 获取当前障碍物

于 2013-02-16T23:17:16.010 回答