Как получить доступ к сцене от класса AS3 в Adobe Flash
-
30-09-2019 - |
Вопрос
Проблема, которую я столкнулся, состоит в том, что я использую клавиш RoadeEventListener, чтобы заработать Movieclip. Когда я студент колледжа, я создаю это для назначения, но мы вынуждены использовать классы AS3.
Когда я запускаю код в обслуживании, проблем нет. Но когда я пытаюсь получить доступ к этому из другого класса (с «экспортом для ActionScript» в вопросе Movieclip), я получаю ошибку, которую он не может обратиться к сцену.
это.addeventListener (KeyboardEvent.ky_down, dostuff);
Решение
Класс в AS3 не на сцене, пока вы на самом деле не поместите его там. В результате «this.Stage» будет нулевым во время компиляции. Вы можете обойти эту проблему, используя событие «Добавлено_to_Stage», чтобы задержать привязку своих слушателей до тех пор, пока не будет правильно.
public function MyClass(){
this.addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
}
private function addedToStageHandler(e:Event):void{
this.stage.addEventListener(KeyboardEvent.KEY_DOWN, dostuff);
}
Другие советы
«1120: доступ к неопределенной клавиатуре свойства. Есть ваш ответ. Вы не определили свойства клавиатуры. Это означает, что вы не импортировали в пакет.
Должен выглядеть что-то вроде этого:
import flash.display.*;
import flash.events.*;
import flash.ui.*;
Совет: Имейте более глубокий взгляд в импорт. Попробуйте использовать Flash Builder, гораздо лучше для начинающих и автопомпортных классов, поэтому вам не нужно запоминать все.
Этот ответ помог мне миллион раз, но у меня еще нет достаточно очков, чтобы всплыть его, или я бы.
Это происходит в общем, когда вы пытаетесь получить доступ к чему-либо на сцене, прежде чем он добавлен на сцену. Некоторое время я был, используя init () в конструкторе всех основных классов моих проектов, но из-за этого вопроса я больше не делаю. Теперь, вместо этого я заменил его с этим (где главное - это конструктор класса / имя):
public function Main():void {
this.addEventListener(Event.ADDED_TO_STAGE, init);
super();
}
...
private function init(e:Event):void {
...
Я надеюсь, что это поможет кому-то еще, кто читал любой из книг, которые я сделал на Flash, которые предлагают идею init ().
И.. спасибо Грег В.
Когда вы создаете класс, вы должны обратиться к сцену изнутри вашего класса COZ, его не доступны во всем мире, вы должны передать его в класс, а вот пример для использования сценического слушателя событий внутри класса.
package {
import flash.events.KeyboardEvent;
public class Eventhndl{
private var obj:Object; //create local variable to refarance stage
public function Eventhndl(objStage:Object):void{
obj = objStage; //make local refarance for stage inside the class
obj.addEventListener(KeyboardEvent.KEY_DOWN,runit); //add the event listener
}
private function runit(Event:KeyboardEvent):void{
trace("keyDownHandler: " + Event.keyCode);
trace("ctrlKey: " + Event.ctrlKey);
trace("keyLocation: " + Event.keyLocation);
trace("shiftKey: " + Event.shiftKey);
trace("altKey: " + Event.altKey);
}
}
}
Сохраните файл как EventHndl.as, и теперь вы можете просто добавить экземпляр этого класса и пройти независимо от объекта, который вам нужно слушать свое событие, вот как это сделать.
import Eventhndl;
var EH:Eventhndl = new Eventhndl(stage);