Вопрос

Проблема, которую я столкнулся, состоит в том, что я использую клавиш 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); 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top