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