Actionscript 3 有什么我';我在这个AS3代码中缺少';项目文件/主类文件是否有潜在问题?

Actionscript 3 有什么我';我在这个AS3代码中缺少';项目文件/主类文件是否有潜在问题?,actionscript-3,flash,Actionscript 3,Flash,这只是一个免责声明,我是一个非常初级的编码者,学过基础知识,但很可能有更好的方法来达到同样的效果,不过这是我被告知要使用的方法 错误本身是: TypeError:错误#1009:无法访问空对象引用的属性或方法。在目标/gameLoop()处 “目标”类文件的代码: import flash.events.Event; import flash.events.MouseEvent; import flash.display.MovieClip; import flash.events.Keyboa

这只是一个免责声明,我是一个非常初级的编码者,学过基础知识,但很可能有更好的方法来达到同样的效果,不过这是我被告知要使用的方法

错误本身是:

TypeError:错误#1009:无法访问空对象引用的属性或方法。在目标/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")
        }
    }

}
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";
            }
        }
        
        
        
    }
    
    

}
}

“雷管”类文件的代码:

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")
        }
    }

}
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";
            }
        }
        
        
        
    }
    
    

}
导入flash.events.Event;
导入flash.events.MouseEvent;
导入flash.display.MovieClip;
导入flash.events.KeyboardEvent;
公共级雷管延伸至MovieClip{
var DRef:MovieClip;
var DetState:String=“空闲”
变量frameCount:Number=0
var SecMonitor:Number=0
var DetTimer:数字=10
var GOtimer:Number=14
公共功能雷管(){
//构造代码
addEventListener(事件输入帧,gameLoop);
this.addEventListener(MouseEvent.MOUSE_DOWN,mDown);
this.addEventListener(MouseEvent.MOUSE_UP,mUp);
stage.addEventListener(KeyboardEvent.KEY_DOWN,kDown);
DRef=MovieClip(this.parent);
}
函数gameLoop(myEvent:Event)
{
如果(DetState==“DetOn”)
{
跟踪(“Det:武装”)
帧数+=1;
如果(帧数>24)
{
帧数=0;
SecMonitor+=1;
DetTimer-=1;
GOtimer-=1;
}
如果(DetTimer<0)
{
DetTimer=0;
DetState=“爆炸”;
}
}
如果(DetState==“爆炸”)
{
跟踪(“Det:BOOM”)
这个高度+=5;
该宽度+=5;
这个α=0.05;
如果(此宽度>120)
{
这个宽度=120;
}
如果(此高度>120)
{
这个高度=120;
}
如果(这个α<0)
{
DetState=“死亡”;
}
}
如果(DetState==“死”)
{
跟踪(“Det:Dead”)
}
countDownBox.text=DetTimer.toString();
//跟踪(GOtimer)
//跟踪(DetTimer)
//跟踪(帧数)
}
函数mDown(myEvent:MouseeEvent)
{
如果(DetState==“DetOn”)
{
这个.startDrag();
}
} 
功能mUp(myEvent:MouseeEvent)
{
如果(DetState==“DetOn”)
{
这个.stopDrag();
}
}
函数kDown(myEvent:KeyboardEvent)
{
如果(DetState==“空闲”)
{
如果(myEvent.keyCode==32)
{
DetState=“DetOn”;
}
}
}
}
}

因此,我得到了一个大部分处于休眠状态且无用的文件,用于本周四到期的一个游戏项目,并且似乎无法使用我所学到的唯一引用类文件的方法。我认为问题可能在于它是一个movieclip类型的变量,因此“不知道”如何处理它。然而,我已经征求了同行们的第二个意见,没有人(包括我自己)知道这为什么不起作用

目前我了解到,只有当我试图在名为“det1”的对象上测试“collision”时,才需要引用类文件,但它有链接,因此我认为这将是最好的做法。然而,我也在没有类文件引用的情况下测试了它(在“.det1”之前的“DRef”)还有一个错误告诉我:“E:\Education\Work\UAL\BA Games Design\Year 1\C&D\Units\PU001546\Part 1\DemolisionV6Started\Target.as,第25行,第27 1120列:访问未定义的属性det1。”因此,即使我知道并检查了该对象是动态的,被命名为“det1”的movieclip似乎仍然认为它是一个未定义的属性

坦率地说,我不知道下一步该怎么做,因为这种方法是使游戏功能发挥的基础,正如我收到的游戏设计文档所说的那样。我甚至尝试过下载没有代码的相同文件,但我得到了相同类型的错误,但它是:

1034:类型强制失败:无法转换闪存。显示::Stage@7fffd13e0d1要闪烁.display.MovieClip。基本上
我假设这是这个“声明”的一个问题(?)mRef=MovieClip(this.parent);即使这在其他项目中也能很好地工作

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

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

如果DRef构造接受参数,那么应该使用DRef=newYouCustomeClass(参数)