【问题标题】:How to hitTestObject MC items of an array with a MC target?如何使用 MC 目标命中数组的 TestObject MC 项?
【发布时间】:2013-02-16 15:57:03
【问题描述】:

我有一个数组中的项目,每个都是一个动画剪辑,它以 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++;
}

【问题讨论】:

    标签: actionscript-3 flash hittest


    【解决方案1】:

    很可能,问题出在这段代码中:

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

    在 i 随计时器调用发生变化后,障碍物阵列 [i] 将为 null 或更糟 - 另一个对象,而不是您需要检查的对象。

    您应该将其更改为:

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

    event.target 将从 Enterframe 事件中调用 checkHitTest 获取当前障碍

    【讨论】:

      【解决方案2】:

      hitTestObject 在您尝试使用它时很可能不存在。从您共享的代码中,我看不到您在代码中创建它的位置。因此,假设 carTarget 是舞台上的一个对象,并且在您想使用它时它具有属性或对象 hitTestObject 已初始化 - 假设这些东西,那么您需要确保当此代码运行时,该对象仍然存在。

      【讨论】:

      • 感谢您的回复,但更多的问题是在哪里放置 hitTestObject 语句以重复检查命中。目前它没有并且只回复 TypeError: Error #2007: Parameter hitTestObject must be non-null。 ?
      猜你喜欢
      • 1970-01-01
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多