Я начал работать над учебником по игре «Флэш-стрелялка» и закончил его Asgamer Shoot em upp Game
Теперь я начал создавать новый .fla, который является главным меню, и у меня есть кнопка воспроизведения, поэтому, когда я нажимаю на нее, она загрузите .swf (Game swf), но когда я нажимаю кнопку, я получаю следующую ошибку.
TypeError: Error #1009: Cannot access a property or method of a null object reference.
-at com.senocular.utils::KeyObject/construct()
-at com.senocular.utils::KeyObject()
-at com.actionscript.Ergasia::Ship()
-at com.actionscript.Ergasia::Engine()
public function Engine() : void {
if(stage) {
initialize();
} else {
addEventListener(Event.ADDED_TO_STAGE,initialize);
}
}
private function initialize(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE,initialize);
// here goes the code that's currently in Engine constructor
}
РЕДАКТИРОВАТЬ: Спасибо Viper за решение этой проблемы!
stage
, в то время как в этом содержимом его свойствоstage
еще имеет значение null, поскольку оно загружено, но нигде не добавлено. Итак, где бы вы ни обратились кstage
в SWF-файле игры, создайтеEvent.ADDED_TO_STAGE
прослушиватель и поместите туда весь код, который обращается к stage, также не позволяйте продолжить, пока stage имеет значение null. Кроме того, недостаточно инициировать загрузку SWF, вы можете дождаться завершения загрузки. - person Vesper   schedule 26.04.2013Ship
класс. Пересмотрите всю свою кодовую базу для конструкторов, которые вызываютstage.something
внутри себя, это приведет к ошибке 1009, если вы им позволите. Вместо этого вставьтеif (stage) init(null); else addEventListener(Event.ADDED_TO_STAGE,init);
строку в конец каждого из них и реализуйтеfunction init(e:Event):void { removeEventListener(Event.ADDED_TO_STAGE,init); ...}
, который будет обрабатывать все, что нужно вашему классу на этапе. - person Vesper   schedule 26.04.2013Engine
класс имеет предварительно размещенный экземпляр на сцене во время разработки. Правильно, это обычная проблема решения stage в конструкторах. Да, вам нужно сделать именно это, за исключением того, чтоEngine()
return void - это все еще конструктор. Итак,public function Engine() {
вместо: void
. - person Vesper   schedule 26.04.2013public function Engine() {
я меняю это, но все равно получаю ошибку 1009 - person Tony Zach   schedule 26.04.2013in Engine() in Ship()
или где-то еще? - person Vesper   schedule 26.04.2013at com.senocular.utils::KeyObject/construct() at com.senocular.utils::KeyObject()
я разместил два .as Engine и Ship, и я не могу понять, как вставить код, который вы мне дали. - person Tony Zach   schedule 26.04.2013private function initialize(e:Event = null):void
, добавляете оператор removeEventListener в качестве первой строки, затем добавляете новый конструктор, как вы его написали, и проверяете. Также обновите вопрос, если вы получите еще 1009. - person Vesper   schedule 26.04.2013