По принцип се опитвах да създам игра на шах и тя има някои основни функции. Срещнах някои грешки по време на изпълнение, които изглежда не мога да коригирам. Опитах се да потърся решения и намерих няколко, но изглежда нито едно от тях не работи за мен.
След това създадох нов флаш проект, за да видя дали грешката все още се появява, само за да се уверя, че не е друга част от моята програма, която причинява проблема.
Сцената има петоъгълен обект (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()
Ако променя кода в основния клас на:
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 е null, когато програмата стартира? Мислех, че обектите, които се поставят на сцената с помощта на IDE, се инициализират преди да се изпълни какъвто и да е писмен код, но това не изглежда да е така.
Опитах да използвам слушатели на събития (ENTER_FRAME и таймер), но те все още не решиха проблема.
Как мога да променя програмата, така че обектът да не е null, когато определен код, напр. функцията FairyTail() се изпълнява? Не съм ли написал кода си правилно или това е проблем със самия Flash/ActionScript?