2009-08-19 2 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

stage.invalidate()メソッドを呼び出すと、Event.RENDERイベントが送出されます。 AS3 referenceによれば、画面がレンダリングされる直前にEvent.RENDERが送出され、すべてのリスニングオブジェクトに更新の機会が与えられます。私はEvent.RENDERを使用して、何かがパラメータを変更したときにのみ静的図形を再描画しました。すべてのフレームを再描画するよりも高速です。

+0

Event.RENDERは依存しません。ステージがサイズ変更されているときなど、頻繁に起動することはありません。スタンドアローンのFlash Playerのウィンドウの角をドラッグしてサイズを変更すると、ステージのサイズ変更中にEvent.RENDERが呼び出されることはありません。EVEN THOUGH Event.RESIZEはフレームごとに送出され、resizeハンドラはステージを呼び出します。無効にし、オブジェクトの位置を更新し、プレイヤーはそれらを新しい場所でレンダリングしますが、多くのEvent.RENDERイベントがありません。これにより、Event.RENDERは頼りにならず、役に立たなくなります。他の誰もこの動作を確認できますか? – Triynko

+1

このコメントは、「ステージのサイズが変更されたときにEvent.RENDERが送出されますか?あなたの証拠を含めると、コードやAS3自体に問題があるかどうかを確認してください。それを声明としてではなく、質問として綴るようにしてください。 –

関連する問題