这个AS3代码中是否存在错误或项目文件/主类文件可能存在错误的内容?

时间:2016-01-18 13:03:48

标签: actionscript-3 flash

只是一个免责声明我非常喜欢编码,已经教过基础知识,但最有可能获得相同结果的更好方法,但这是我被告知使用的方法。

错误本身是:

TypeError:错误#1009:无法访问空对象引用的属性或方法。在Tar​​get / gameLoop()

“目标”类文件的代码:

import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.events.KeyboardEvent;

public class Target extends MovieClip {

    var DRef:MovieClip;

    var TargState:String = "Idle";

    public function Target() {
        // constructor code


        addEventListener(Event.ENTER_FRAME,gameLoop);
    }

    function gameLoop(myEvent:Event)
    {
        if(TargState == "Idle")
        {
                             /*THIS APPEARS TO BE THE ISSUE, 
                             HOWEVER IT HAS WORKED FOR EVERY 
                             OTHER PROJECT SO FAR*/
            if(this.hitTestObject(DRef.det1))
            {
                //TargState = "Dead";
                trace("COLLIDING")
            }
        }

        if(TargState == "Dead")
        {
            trace("Target: Dead")
        }
    }

}

}

'Detonator'类文件的代码:

import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.events.KeyboardEvent;

public class Detonator extends MovieClip {

    var DRef:MovieClip;

    var DetState:String = "Idle"
    var frameCount:Number = 0
    var SecMonitor:Number = 0
    var DetTimer:Number = 10
    var GOtimer:Number = 14

    public function Detonator() {
        // constructor code

        addEventListener(Event.ENTER_FRAME,gameLoop);
        this.addEventListener(MouseEvent.MOUSE_DOWN, mDown);
        this.addEventListener(MouseEvent.MOUSE_UP, mUp);
        stage.addEventListener(KeyboardEvent.KEY_DOWN,kDown);

        DRef = MovieClip(this.parent);
    }

    function gameLoop(myEvent:Event)
    {



        if(DetState == "DetOn")
        {
            trace("Det: Armed")

            frameCount += 1;

            if(frameCount > 24)
            {
                frameCount = 0;
                SecMonitor += 1;
                DetTimer -= 1;
                GOtimer -= 1;
            }

            if(DetTimer < 0)
            {
                DetTimer = 0;
                DetState = "explode";
            }
        }

        if(DetState == "explode")
        {
            trace("Det: BOOM")

            this.height += 5;
            this.width += 5;
            this.alpha -= 0.05;

            if(this.width > 120)
            {
                this.width = 120;
            }

            if(this.height > 120)
            {
                this.height = 120;
            }

            if(this.alpha < 0)
            {

                DetState = "Dead";
            }
        }

        if(DetState == "Dead")
        {
            trace("Det: Dead")
        }


        countDownBox.text = DetTimer.toString();
        //trace(GOtimer)
        //trace(DetTimer)
        //trace(frameCount)
    }

    function mDown(myEvent:MouseEvent)
    {
        if(DetState == "DetOn")
        {
            this.startDrag();
        }
    } 

    function mUp(myEvent:MouseEvent)
    {
        if(DetState == "DetOn")
        {
            this.stopDrag();
        }
    }

    function kDown(myEvent:KeyboardEvent)
    {
        if(DetState == "Idle")
        {
            if(myEvent.keyCode == 32)
            {
                DetState = "DetOn";
            }
        }



    }



}

}

因此本周四我已经获得了大部分休眠和贫瘠的文件用于游戏项目,并且似乎无法使用我教过的唯一方法来引用类文件。我认为问题可能在于它是一个movieclip类型变量,因此“不知道”如何处理它。不过,我已经要求同行提出第二意见,没有人(包括我自己)知道为什么拒绝合作。

目前我明白,如果我试图在'det1'上测试'碰撞'的对象有链接,那么只需要引用类文件,但确实如此,因此我认为这是最好的然而,我还测试了它没有类文件引用('。''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' C&amp; D \ Units \ PU001546 \ Part 1 \ DemolisionV6Started \ Target.as,第25行,第27列1120:访问未定义属性det1。“因此,即使我知道并检查过该对象是动态的,一个名为'det1'的动画片段,它似乎仍然认为它是一个未定义的属性。

坦率地说,我不知道接下来要做什么,因为这个方法对于使游戏功能成为我已经给出的游戏设计文档所说的应该是基本的。我甚至尝试下载相同的文件,没有我的代码,我得到相同类型的错误,但它是:

1034:类型强制失败:无法将flash.display :: Stage @ 7fffd13e0d1转换为flash.display.MovieClip。在Main()

我认为这是'声明'的一个问题(?)mRef = MovieClip(this.parent);即使这在其他项目中运作良好

1 个答案:

答案 0 :(得分:0)

1-在第一个类中,您应该在使用它之前实例化该对象。 DRef =新的MovieClip()

2-在第二个中,MovieClip构造函数不接受任何参数,因此它应该是 DRef = new MovieClip()而不是DRef = new MovieClip(this.parent);

如果DRef构造接受了参数,那么你应该使用DRef = new YOUCustomeClass(arguments);