【发布时间】:2014-02-21 21:47:10
【问题描述】:
我基本上一直在尝试创建一个国际象棋游戏,它具有一些基本功能。我遇到了一些似乎无法修复的运行时错误。我尝试四处寻找解决方案,找到了几个,但似乎没有一个适合我。
然后我创建了一个新的 flash 项目来查看错误是否仍然存在,只是为了确保不是我的程序的其他部分导致了问题。
舞台上有一个五边形对象(MovieClip),它的实例名称为 PentaGray,类为 Gray。有一个叫做 PentaClass 的中间类。
主(文档)类:
import flash.display.MovieClip;
import PentaClass;
import Gray;
public class Main extends MovieClip
{
// public var Natsu:String;
public function Main()
{
FairyTail();
}
public function FairyTail()
{
trace("PentaGray = " + PentaGray);
trace("PentaGray's name is " + PentaGray.name);
PentaGray.TraceThis();
}
}
PentaClass 类:
public class PentaClass extends Main
{
public function PentaClass()
{
}
public function TraceThis():void
{
trace("Fairy Tail :D");
}
}
灰阶:
public class Gray extends PentaClass
{
public function Gray()
{
// TraceThis();
}
}
像这样运行程序会导致将其打印到输出窗口:
PentaGray = null
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Main/FairyTail()
at Main()
at PentaClass()
at Gray()
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at Main()
PentaGray = null
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Main/FairyTail()
at Main()
如果我将 Main 类中的代码更改为:
if (PentaGray)
{
trace("PentaGray's name is " + PentaGray.name);
PentaGray.TraceThis();
}
然后这是输出:
PentaGray = null
PentaGray = [object Gray]
PentaGray's name is PentaGray
Fairy Tail :D
另外,如果我通过取消注释构造函数中的语句从 Gray 运行函数,它可以正常工作,但对于我的游戏,我需要从文档类运行子类函数。
我想知道的是,为什么程序启动时 PentaGray 为空?我认为使用 IDE 放置在舞台上的对象会在任何编写的代码运行之前进行初始化,但事实并非如此。
我尝试过使用事件侦听器(ENTER_FRAME 和计时器),但它们仍然没有解决问题。
如何更改程序以使对象在某些代码时不为空,例如FairyTail() 函数,被执行了吗?是我没有正确编写代码还是这是 Flash/ActionScript 本身的问题?
【问题讨论】:
标签: actionscript-3 object null stage