0

配列内にアイテムがあり、それぞれが1秒の遅延間隔で再生されるムービークリップと、配列アイテム(obstacleArray [i])との衝突を回避することを目的とした矢印キーで制御されるターゲットムービークリップ(carTarget)です。衝突が発生したときに通知するhitTestObjectステートメントを作成しようとしています。ただし、パラメータhitTestObjectがほとんどnull以外であり、それを解決する方法がわからないなどのエラーを受け取りました。

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

2 に答える 2

0

ほとんどの場合、問題は次のコードブロックにあります。

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

iがタイマー呼び出しで変更された後、obstructionArray [i]はnullまたはそれ以上になります。これは、チェックする必要のあるオブジェクト以外のオブジェクトです。

これを次のように変更する必要があります。

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

event.targetは、EnterframeイベントからcheckHitTestを呼び出す現在の障害物を取得します

于 2013-02-16T23:17:16.010 に答える
0

使用しようとしている時点で、hitTestObject が存在しない可能性が非常に高くなります。あなたが共有したコードから、コードのどこにそれを作成したかわかりません。したがって、carTarget がステージ上のオブジェクトであり、使用するときにプロパティまたはオブジェクト hitTestObject が初期化されていると仮定すると、このコードが実行されているときにそのオブジェクトがまだ存在することを確認する必要があります。

于 2013-02-16T16:43:41.830 に答える