我有一个数组中的项目,每个项目都是一个电影剪辑,它以1秒的延迟间隔播放,目标电影剪辑(carTarget)由箭头键控制,目的是避免与阵列项目(obstacleArrayi)发生冲突。我一直在尝试创建一条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++;
}发布于 2013-02-17 07:17:16
最有可能的是,问题出在这段代码中:
function checkHitTest(event:Event):void{
if(carTarget.hitTestObject(obstacleArray[i]))
{
trace("HIT!");
}
}在我更改计时器调用后,obstacleArrayi将为null或更糟-您需要检查的对象之外的另一个对象。
您应该将其更改为:
function checkHitTest(event:Event):void{
if(carTarget.hitTestObject(event.target))
{
trace("HIT!");
}
}event.target将从Enterframe事件中获取调用checkHitTest的当前障碍
发布于 2013-02-17 00:43:42
在您尝试使用hitTestObject时,它很可能并不存在。从您共享的代码中,我看不到您在代码中创建它的位置。因此,假设carTarget是舞台上的一个对象,并且当您想要使用它-assuming这些东西时,它具有初始化的属性或对象hitTestObject,那么您需要确保当此代码运行时,该对象仍然存在。
https://stackoverflow.com/questions/14912170
复制相似问题