2013-02-16 39 views
0

我有一個數組中的項目,每個項目都是一個動畫片段,它以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++; 
} 

回答

0

最有可能的,問題是在這個代碼塊:

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

0

在嘗試使用hitTestObject時,很可能不存在hitTestObject。從您共享的代碼中,我看不到您在代碼中創建它的位置。因此,假設carTarget是舞臺上的一個對象,並且在您想要使用它的時候初始化屬性或對象hitTestObject - 假設這些東西,那麼您需要確保在該代碼運行時該對象仍然存在。

+0

感謝您的答覆,但它更多的在哪裏放置hitTestObject問題聲明重複檢查命中。目前它沒有,只有 TypeError:Error#2007:參數hitTestObject必須爲非null。 ? – user2075625 2013-02-16 17:16:02

相關問題