【问题标题】:Looping Error when doing a hitTest in as3在 as3 中执行 hitTest 时出现循环错误
【发布时间】:2013-06-12 03:41:12
【问题描述】:

所以,我有这个代码:

public function hitTest1(e:Event) : void
    {
        if (hitTestObject(target.hit)){
        gotoAndStop(2,"Scene 1");
        removeEventListener(Event.ENTER_FRAME, hitTest1);

        }
    }

其中target是要被击中的对象,hit是所述对象上层中的符号。当我运行代码时,我再次遇到此错误。

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at com.Mass.basics1::Asteroid/hitTest1()

注意:Asteroid 是包含所有这些代码的 .as 文件。

以下是其余代码供参考:

package com.Mass.basics1
{

import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;

public class Asteroid extends MovieClip
{
    public var target:Cosmo;
    private var stageRef:Stage;
    private var speed:Number;
    // public var ourAsteroid:Asteroid = new Asteroid(stage);


    public function Asteroid(stageRef:Stage)
    {


        this.stageRef = stageRef;
        setupAsteroid(true);

        addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
        addEventListener(Event.ENTER_FRAME, hitTest1);

    }

    public function hitTest1(e:Event):void
    {
        if (hitTestObject(target.hit))
        {
            gotoAndStop(2,"Scene 1");
            removeEventListener(Event.ENTER_FRAME, hitTest1);

        }
    }


    public function setupAsteroid(randomizeY:Boolean = false):void
    {
        //inline conditional, looks complicated but it's not.
        y = randomizeY ? Math.random() * stageRef.stageHeight:0;
        x = Math.random() * stageRef.stageWidth;

        rotation = Math.random() * 360;
        scaleX = Math.random();
        scaleY = scaleX;

        speed = 20 + Math.random() * 10;
    }

    public function loop(e:Event):void
    {
        y +=  speed;

        if (y > stageRef.stageHeight)
        {
            setupAsteroid();

        }


    }

}
}

【问题讨论】:

    标签: actionscript-3 hittest


    【解决方案1】:

    那么,“目标”对象在哪里?您只是声明一个变量,而不是创建对象或设置引用。这是一个公共变量,所以也许您正在其他地方设置参考?在这种情况下,请确保在调用 hitTest1 函数之前分配一个引用...

    【讨论】:

    • 抱歉回复晚了,另一个对象是行星,它有自己的类文件。然后我创建一个 Planet 类型的变量“Target”,然后进行命中测试。
    • @Rizzla:最好以 cmets 的身份提出这样的问题。你应该只回答正确的答案。
    • @SidSmith 确保在调用 hitTest1 之前检查是否创建了 Planet 对象,因为错误告诉您这不是...
    • 这很奇怪,因为它是先创建的,但是现在我知道错误的含义,也许我可以弄清楚。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多