Optimization of Tween Class and implementation of Jugglar Class in Starling framework
StarlingフレームワークのTweenクラスにおける最適化とJugglerクラスの実装F-site連載「Starlingフレームワークを用いたStage3Dによる2Dアニメーション」第4回「StarlingフレームワークのTweenクラスにおける最適化とJugglerクラスの実装」をおもなお題として、関連するネタにも触れる。なお、勉強会のUSTREAM映像が「Stage3D勉強会(第3回) 活動レポート」で公開されている。 01 Tweenクラスによるトゥイーンアニメーション01-01 Tweenクラスは3つの手順でトゥイーンを定めるTweenクラスでトゥイーンアニメーションを定める手順は3つ(「Tweenクラスで簡単なトゥイーンアニメーションを定める」参照)。
「3つのTweenオブジェクトのトゥイーンを順にアニメーションさせる」サンプルのトゥイーンを定めるメソッド抜書き。 スクリプト001■設定を変えてTweenオブジェクトを順につくる
Tweenクラスのトゥイーンを定めるメソッドについては、「複数のプロパティをトゥイーンする」参照。 01-02 イベントをコールバック関数で扱う「EaselJSのつぎのバージョンにEventDispatcherクラスが加わる」のに……。
参考: Adobe Flash Platform「イベントモデルとコールバック」(再邦訳は「Jugglerオブジェクトに加えたインスタンスはadvanceTime()メソッドが呼ばれる」[*3]参照) 01-03 Jugglerクラスは加えられたオブジェクトのadvanceTime()メソッドを呼出すJuggler.add()メソッドでオブジェクトを加えると、Juggler.advanceTime()メソッドでオブジェクトのadvanceTime()メソッドが呼出される。
Starling.jugglerプロパティで参照されるJugglerオブジェクトは、内部的にFlash PlayerからEvent.ENTER_FRAMEイベントを受取って、Juggler.advanceTime()メソッドを呼出している。 Starling.juggler.add(Tweenオブジェクト) ただし、Jugglerオブジェクトに加えるには、IAnimatableインターフェイスが実装されていなければならない。IAnimatableインターフェイスを実装するサンプルは、「Jugglerオブジェクトでインスタンスをアニメーションさせる」参照。 02 Tweenクラスのトゥイーンを最適化する02-01 Tween.reset()メソッドでオブジェクトを使い回すTween.reset()メソッドは、Tweenオブジェクトを初期化して設定し直す。 Tweenオブジェクト.reset(インスタンス, 時間, イージング) 引数はコンストラクタと同じ。 new Tween(インスタンス, 時間, イージング) というか、Tween()コンストラクタの実装はTween.reset()メソッドを呼ぶだけ。 前掲スクリプト001は、つぎのようにTween.reset()メソッドを使うと、Tweenオブジェクトが使い回せてお得(クラス定義全体は「ひとつのTweenオブジェクトを使い回して順にトゥイーンアニメーションさせる」)。
02-02 3つの手順が1ステートメントで済むJuggler.tween()メソッドStarlingフレームワーク1.3で備わったJuggler.tween()メソッドを使うと、トゥイーンを定める3つの手順が1ステートメントで済む(「Jugglerクラスの新たなメソッドでトゥイーンを加える」参照)。 Jugglerオブジェクト.tween(インスタンス, 時間, トゥイーンを定めるObject) 今までトゥイーンを定めるために何行も書いていたステートメント(前掲スクリプト001)。
それが、Juggler.tween()メソッドを使えば、たった1ステートメントに!!
しかも、誰に定める設定なのかを見分けてくれる優れもの!
でも、オブジェクトを使い回さないと、(負荷が)お高いんでしょ……? なんと!何もしなくても、Tweenオブジェクトが使い回される!! 前掲スクリプト001は、Juggler.tween()メソッドを使ってつぎのように書替えられる。 スクリプト002■Juggler.tween()メソッドでエコなトゥイーンに
03 Jugglerクラスの実装を見る03-01 Juggler.tween()メソッド「StarlingフレームワークのJuggler.tween()メソッド」の「実装」参照(GitHub「Juggler.as」)。 03-02 Juggler.add()とJuggler.advanceTime()メソッド「Jugglerオブジェクトに加えたインスタンスはadvanceTime()メソッドが呼ばれる」参照。 03-03 Starling.jugglerプロパティで参照されるJugglerオブジェクト「Starlingオブジェクトに備わるJugglerオブジェクト」参照。 作成者: 野中文雄 Copyright © 2001-2013 Fumio Nonaka. All rights reserved. |
||||||||