HTML5テクニカルノート EaselJS 0.8.0: 使い回すオブジェクトにプロパティを定める
オブジェクトは、できれば使い回した方がお得です(「HTML5のCanvasでつくるダイナミックな表現―CreateJSを使う」 第14回「オブジェクトの使い回しとアニメーション素材の変更」の「ガベージコレクションを減らす」参照)。EaselJS 0.8.0には、そのために使えるプロパティを定め直せるメソッドが加わったり、これまでのメソッドが変わったりしました。本稿はそのいくつかを、かいつまんでご説明します。 01 geomパッケージのクラスにプロパティ値を定め直す新たなメソッドが備わった役目の終わったオブジェクトを使い回すには、プロパティ値を新たにあたえなければなりません。EaselJS 0.8.0のgeomパッケージの幾何学的なクラスには、プロパティ値を定め直すメソッドが新たに備わりました(表001)。メソッドの名前はsetValues()に統一されており、引数はコンストラクタと同じです[*1]。 表001■geomパッケージのクラスに備わったプロパティ値を定め直すメソッド
EaselJS 0.7.1までのCreateJSのクラスは、コンストラクタがそれぞれの引数をinitialize()メソッドに渡して呼出していました。したがって、一般にオブジェクトのinitialize()メソッドでプロパティを与えることができたのです。ところが、EaselJS 0.8.0から、ライブラリのクラス継承の仕方が変わりました(「CreateJS 14/12/12: 新たな継承の仕組みを定めるextend()とpromote()メソッド」参照)。そして、クラスの定めからinitialize()メソッドが除かれてしまったのです。 以下のサンプル001は、EaselJS 0.7.1で書いたコードを0.8.0に直しました。このサンプルでは、Pointオブジェクトを変数(currentPointとlastPoint)に与え、その座標値を変えることによりオブジェクトは使い回しています。ただし、0.7.1でプロパティ値を定めるために用いたinitialize()メソッドがなくなりましたので、0.8.0の新しいPoint.setValues()メソッドに置き替えました。
サンプル001■EaselJS 0.8.0: Smooth Line tuned
02 DisplayObjectインスタンスにプロパティをコピーするDisplayObjectとそのサブクラスには、setValues()のようなメソッドは備わっていません。けれど、複製した新たなインスタンスを返すDisplayObject.clone()メソッドがあり、内部的にDisplayObject._cloneProps()メソッドによりプロパティをコピーしています。したがって、このメソッドをオブジェクトの使い回しに役立てられそうです。 ところが、EaselJS 0.7.1までは、メソッドの名前はアンダースコアのないDisplayObject.cloneProps()でした。内部的(protected)なメソッドのため、ドキュメントにも変わったことが触れられていません。以下のサンプル002は、Spriteオブジェクトを使い回すEaselJS 0.7.0のコードについて、0.8.0のメソッドに差替えた例です。
サンプル002■EaselJS 0.8.0: Optimized Sparkling Stars with Fade and Blur 内部的なメソッドを使っていると、前触れもなくいきなり仕様が変わってしまうこともあります。できれば、公(public)のメソッドを用いる方が安心でしょう。DisplayObject.set()メソッドは、引数に渡したオブジェクトのプロパティすべての値をインスタンスにコピーします[*2]。前掲サンプル002と同じEaselJS 0.7.0のコードを、DisplayObject.set()メソッドで書替えたのが以下のサンプル003です。 DisplayObjectオブジェクト.set(オブジェクト)
サンプル003■EaselJS 0.8.0: Optimized Sparkling Stars with Fade and Blur 2 DisplayObject.set()は、もともと与えたいプロパティだけをObjectインスタンスに加えて渡すためのメソッドです。そのため、もとオブジェクトをそのまま引数として渡すと、プロパティが残らず拾われて参照するインスタンスに与えられます。コピーするプロパティを絞りたいときは、DisplayObject._cloneProps()メソッドの実装を参考にして新たな関数を定めるというやり方もあるでしょう[*3]。
作成者: 野中文雄 Copyright © 2001-2015 Fumio Nonaka. All rights reserved. |
|||||||||||||||||||||||||||||||||