2009-08-19 6 views
1

Я создал класс, который должен зарегистрироваться на событие Event.RENDER, чтобы он знал, когда визуализуется сцена. Упрощенная версия моего кода выглядит следующим образом:Почему Event.RENDER не отправляется?

package 
{ 
    import flash.events.Event; 
    import flash.display.Sprite; 
    public final class Test extends Sprite 
    { 
     public final function Test() 
     { 
      addEventListener(Event.ADDED_TO_STAGE,added,false,0,true); 
     } 

     private final function added(event:Event):void 
     { 
      trace("added to stage"); 
      stage.addEventListener(Event.RENDER, renderHandler,false,0,true); 
     } 

     private final function renderHandler(event:Event):void 
     { 
      trace("Event.RENDER dispatched!"); 
     } 
    } 
} 

событие Event.ADDED_TO_STAGE время отправки. Однако событие Event.RENDER не является. Любая идея, что я могу делать неправильно здесь? Родитель добавляет этот объект в качестве дочернего элемента на сцену, так что это не может быть проблемой.

+1

Вы уверены, что stage.invalidate() вызывается после его добавления? – Shua

+0

Я вообще не вызываю stage.invalidate(). Должен ли я? – Tom

+0

Да, см. Здесь http://livedocs.adobe.com/flex/2/langref/flash/display/Stage.html#invalidate() – David

ответ

2

Чтобы отправить событие Event.RENDER, необходимо позвонить по телефону stage.invalidate(). Согласно AS3 reference, Event.RENDER отправляется непосредственно перед отображением экрана, предоставляя всем объектам прослушивания возможность обновления. Я использовал Event.RENDER, чтобы перерисовать статические формы только тогда, когда что-то изменило их параметры. Это быстрее, чем перерисовка каждого кадра.

+0

Event.RENDER не зависит. Он не срабатывает так часто, как должен, например, при изменении размера сцены. Если вы перетащите угол окна автономного Flash Player, чтобы изменить его размер, Event.RENDER НЕ будет вызываться каждый кадр при изменении размера сцены. EVEN THOUGH Event.RESIZE будет отправляться каждый кадр, этап обработки обработчика изменения размера. аннулировать, обновлять позицию объекта, а игрок отображает их в новом месте ... но многие события Event.RENDER отсутствуют. Это делает Event.RENDER незаменимым и бесполезным. Может ли кто-нибудь подтвердить это поведение? – Triynko

+1

Этот комментарий мог бы сделать хороший вопрос сам по себе: «Является ли событие Event.RENDER отправленным при изменении размера сцены?» Включите свои доказательства и посмотрите, есть ли проблема с вашим кодом или AS3. Обязательно сформулируйте это как вопрос, а не как утверждение. –