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