如何使用MC目标hitTestObject MC数组项目?

问题描述:

我有一个数组中的项目,每个项目都是一个动画片段,它以1秒的延迟间隔播放,目标动画片段(carTarget)由箭头键控制,目标是避免与数组项目(obstacleArray [i] )。我一直在试图创建一个hitTestObject语句来通知何时发生冲突。但是,我收到了诸如参数hitTestObject之类的错误,大部分都是非空的,并且无法弄清楚如何解决它。如何使用MC目标hitTestObject MC数组项目?

//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++; 
} 

最有可能的,问题是在这个代码块:

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

后,我与计时器调用改变,那么obstacleArray [I]将为空或更糟 - 比你的需要之外的其它对象去检查。

你应该更改为:

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

event.target将获得当前的障碍来自enterFrame事件调用checkHitTest

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

+0

感谢您的答复,但它更多的在哪里放置hitTestObject问题声明重复检查命中。目前它没有,只有 TypeError:Error#2007:参数hitTestObject必须为非null。 ? – user2075625 2013-02-16 17:16:02