サイトトップ

Director Flash 書籍 業務内容 プロフィール

HTML5テクニカルノート

EaselJS NEXTに加わるDisplayObject.tickイベントの流れを止めるプロパティ

ID: FN1310005 Technique: HTML5 and JavaScript Library: EaselJS NEXT

DisplayObject.tickEnabledプロパティ
文法 DisplayObjectオブジェクト.tickEnabled
プロパティ値

falseを与えると、そのインスタンスおよび子インスタンスにDisplayObject.tickイベントが送られない。そのため、イベントを流す負荷が下げられる。さらに、DisplayObject.tickイベントにともなうオブジェクトの更新(フレームアニメーションやDOMElementの表示)も省ける。デフォルト値はtrue

Container.tickChildrenプロパティ
文法 Containerオブジェクト.tickChildren
プロパティ値

falseを与えると、そのContainerオブジェクトの子インスタンスにはDisplayObject.tickイベントが送られない。そのため、イベントを流す負荷が下げられる。さらに、DisplayObject.tickイベントにともなう子インスタンスの更新(フレームアニメーションやDOMElementの表示)も省ける。デフォルト値はtrue


説明

DisplayObject.tickイベントは、Stage.update()メソッドが呼出されたとき、Stageオブジェクトを頂点とする表示リストに加わったDisplayObjectインスタンスに配信されます。イベントは、そのままでは表示リストのすべてのインスタンスに送られます。その無駄な流れを止めるため、DisplayObjectインスタンスにはDisplayObject.tickEnabled、ContainerオブジェクトにはContainer.tickChildrenプロパティが備わります(「Added DisplayObject.tickEnabled & Container.tickChildren」参照)。

DisplayObject.tickEnabledプロパティをfalseにすると、そのインスタンスおよび子インスタンスにDisplayObject.tickイベントが送られません。Container.tickChildrenプロパティをfalseに定めると、そのContainerオブジェクトはDisplayObject.tickイベントを受取るものの、子オブジェクトにはイベントが渡りません。どちらのプロパティもデフォルト値はtrueです。

DisplayObject.tickイベントが受取られると、インスタンスはCanvasに描かれる準備を整えます。アニメーションするSpriteやMovieClipオブジェクトはフレームを進め、DOMElementは表示を切替えたりします。イベントが止められれば、これらの更新の負荷も下がります。


「EaselJSのDisplayObject.tickイベント」の「」に掲げた以下のJavaScriptコードは、Stageオブジェクト(stage)の表示リストにContainerオブジェクト(parent)を子として加え、さらにその子にShapeオブジェクト(shape)を与えました(第1〜2行目)。そのうえで、ふたつのオブジェクトのDisplayObject.tickイベントに同じリスナー関数(test)を定めています(第3〜4行目)。

そして、Stage.update()メソッドを呼出すと、ふたつのオブジェクトのリスナー関数が順に呼出され、window.alert()メソッドにより警告ダイアログボックスが2回開きます(第7行目)。示される値は、つぎのとおりです(詳しくは前出ノートの「例」の説明を参照)。

[Shape (name=null)],0
[Container (name=null)],1
  1. stage.addChild(parent);
  2. parent.addChild(shape);
  3. parent.addEventListener("tick", test);
  4. shape.addEventListener("tick", test);
  5. stage.update(0);
  6. function test(eventObject) {
  7.   alert([eventObject.currentTarget, eventObject.params[0]]);
  8.   eventObject.params[0]++;
  9. }

前掲コードで親インスタンス(parent)のContainer.tickChildrenプロパティをfalseにすると、子インスタンス(shape)にはDisplayObject.tickイベントが渡らなくなり、そのリスナー関数(test())は呼ばれません。警告ダイアログボックスは1度だけ開いて、親オブジェクトの値を示します。

[Container (name=null)],0
  1. parent.addEventListener("tick", test);
  2. shape.addEventListener("tick", test);
    parent.tickChildren = false;
  3. stage.update(0);

falseに定める親インスタンス(parent)のプロパティをDisplayObject.tickEnabledに書替えれば、このオブジェクトもDisplayObject.tickイベントを受取らなくなるので、警告ダイアログボックスはまったく開きません。

  1. parent.addEventListener("tick", test);
  2. shape.addEventListener("tick", test);
    parent.tickEnabled = false; // tickChildren = false;
  3. stage.update(0);


作成者: 野中文雄
作成日: 2013年10月29日


Copyright © 2001-2013 Fumio Nonaka.  All rights reserved.