如何使用MC目标命中数组的TestObject MC项目?

时间:2013-02-16 15:57:04

标签: actionscript-3 flash hittest

我有数组中的项目,每个都是一个动画片段,以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++;
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

最有可能的问题出现在这段代码中:

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

在我用定时器调用更改后,obstacleArray [i]将为null或更糟 - 除了您需要检查的对象之外的其他对象。

您应该将其更改为:

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

event.target将从Enterframe事件

获取调用checkHitTest的当前障碍