如何使用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 - 假设这些东西,那么您需要确保在该代码运行时该对象仍然存在。
感谢您的答复,但它更多的在哪里放置hitTestObject问题声明重复检查命中。目前它没有,只有 TypeError:Error#2007:参数hitTestObject必须为非null。 ? – user2075625 2013-02-16 17:16:02