Я в основном пытался создать шахматную игру, и у нее есть некоторые базовые функции. Я столкнулся с некоторыми ошибками во время выполнения, которые не могу исправить. Я пробовал искать решения, и я нашел несколько, но ни одно из них, похоже, не работает для меня.
Затем я создал новый флеш-проект, чтобы проверить, возникает ли ошибка по-прежнему, просто чтобы убедиться, что проблема не в другой части моей программы.
На сцене есть объект пятиугольника (MovieClip) с именем экземпляра PentaGray и классом Gray. Есть промежуточный класс PentaClass.
Класс Main (документ):
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 имеет значение null при запуске программы? Я думал, что объекты, которые размещаются на сцене с помощью IDE, инициализируются перед запуском любого написанного кода, но, похоже, это не так.
Я пробовал использовать прослушиватели событий (ENTER_FRAME и таймер), но они все еще не решили проблему.
Как я могу изменить программу, чтобы объект не был нулевым, когда определенный код, например функция FairyTail (), выполняется? Я написал свой код неправильно или это проблема самого Flash / ActionScript?