我基本上一直在尝试创建一个国际象棋游戏,它具有一些基本的功能。我遇到了一些我似乎无法修复的运行时错误。我尝试过寻找解决方案,并且找到了几个解决方案,但是他们都没有为我工作。ActionScript 3 - 第一次操作的舞台对象为空
然后,我创建了一个新的Flash项目,以查看错误是否仍然存在,只是为了确保它不是导致此问题的另一部分程序。
舞台上有一个五角形对象(一个MovieClip),它有一个PentaGray实例名和一个灰色类。有一个称为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()
如果我在主类中更改代码:
if (PentaGray)
{
trace("PentaGray's name is " + PentaGray.name);
PentaGray.TraceThis();
}
然后,这是输出:
PentaGray = null
PentaGray = [object Gray]
PentaGray's name is PentaGray
Fairy Tail :D
另外,如果我在它的构造在取消对语句运行从灰色的功能,它工作正常,但对于我的游戏,我需要从文档类运行子类功能。
我想知道的是,为什么PentaGray在程序启动时为空?我认为使用IDE放置在舞台上的对象在任何编写代码运行之前都会初始化,但似乎并非如此。
我试过使用事件监听器(ENTER_FRAME和计时器),但他们仍然没有解决问题。
如何更改程序,以便某些代码(例如, FairyTail()函数被执行?我没有正确编写我的代码,或者这是Flash/ActionScript本身的问题吗?
要解释什么是我想要做的,我就会把它放回我的棋局的内容。主函数有方法来检查一个瓷砖被点击的时间,如果一块瓷砖在上面,我想检查它的有效移动(它允许移动到的位置)。为了做到这一点,我试图调用Piece类(每种类型的片断,例如一个pawn是一个片段的子类)getMoves()函数,但由于某种原因,当我将Piece/Pawn导入到我的主类中时, boardCoordinates存储图块对象,在第一次使用时为null(就像在FairyTail程序中一样)。我希望我已经正确地解释了这一点。 –
我应该注意到,当我将文档类中的所有Piece/Pawn代码注释掉时,boardCoordinates正常工作。 boardCoordinates是在文档类的构造函数中初始化的2D数组。 –