Adobe Flash非公式テクニカルノート Starlingフレームワークを使う
「Starling」は、Flash Player 11の新しい描画機能Stage3Dにもとづいてつくられた2次元の描画用フレームワークです。本稿では、Flash Professional CS5.5による使い方を簡単にご紹介します(CS5でもほぼ同様)。予めつぎのふたつの準備を済ませてください。 01 Starlingフレームワークで何からつくり始めるか 図001■StarlingコンテンツはFlashのステージの背面に置かれる Starlingフレームワークの表示リストを組立てるには、まずFlashコンテンツのメインタイムラインに当たる最上位の表示オブジェクトをつくらなければなりません。そして、Flashのメインタイムラインと違ってフレームアクションは書けませんから、スクリプトはクラスとして定めます。つまり、Flashのドキュメントクラスに当たるStarlingフレームワークのクラスを定義します。ここでは、Starlingフレームワークの「ルートクラス」と呼ぶことにします。 Flashのドキュメントクラスは、Spriteクラスを継承させることが多いでしょう。けれど、Starlingフレームワークの表示リストには、Starlingの表示オブジェクトしか加えられません。もっとも、Starlingフレームワークには、あえてFlashと同じ名前のクラスがいくつも備えられています。Spriteクラスもそのひとつで、Starlingのルートクラスにスーパークラスとして定められます。ただし、フルネーム(完全修飾名)はstarling.display.Spriteで、flash.display.Spriteとは異なるクラスであることにご注意ください。 02 Starlingフレームワークのルートクラスを定める
Starlingフレームワークのクラスを継承したという以外、Flashのクラス定義ととくに違う点はありません。このクラス(MySprite)は、このままルートクラスとして使えます。もっとも、画面には何も表れません。そこで、正方形をひとつ描いてみます。 実は、starling.display.Spriteクラスは、FlashのSpriteクラスと比べて、使い途がかなり絞り込まれています。具体的には、表示リストに子の表示オブジェクトをもつことに徹し、インスタンス自身には直接描画できないのです。 そこで、矩形が描けるstarling.display.Quadクラスのインスタンスをつくって、子として表示リストに加えます。コンストラクタメソッドの引数には、幅と高さ、およびRGBカラーを渡します。ちなみに、Quadオブジェクトは逆に、子インスタンスはもてません。 new Quad(幅, 高さ, RGBカラー) つぎのスクリプト001に定めたStarlingルートクラスは、50×50ピクセルの青い矩形をQuadオブジェクトでつくり、子として表示リストに加えて座標(50, 50)の位置に表示します。 スクリプト001■青い正方形を含むStarlingルートクラスの定義
子インスタンスを表示リストに加えるaddChild()メソッドが備わっていたりしますので、Quadクラスとimport宣言のパッケージ(starling.display)以外Starlingフレームワークだからという違いは感じないのではないでしょうか。
03 Starlingフレームワークの初期化 var myStarling:Starling = new Starling(Starlingのルートクラス, FlashのStageオブジェクト); そして、インスタンスに対するStarling.start()メソッドの呼出しにより、Starlingフレームワークの描画が始まります。 myStarling.start(); このStarlingフレームワークの初期化は、FLAファイルの側から行います。今回は、つぎのスクリプト001をフレームアクションとして書くことにしましょう。なお、ルートクラス(MySprite)のASファイルは、FLAファイルと同じ場所に置きます。 スクリプト002■Starlingフレームワークを新たにつくって描画する
[ブラウザプレビュー]すると、Starlingフレームワークが新たにつくられ、座標(50, 50)の位置に50ピクセル四方の青い正方形が描かれます(図002)。 図002■画面に青い正方形が描かれる StarlingフレームワークによりせっかくStage3Dの力が使えるのに、動かない画像ではつまりません。つぎは、この正方形を回してみましょう。 04 Starlingフレームワークのアニメーション
一見したところでは、ActionScript 3.0で書くおなじみの回転のアニメーションです。ただ、注意するところがふたつあります。 第1に、Stage3Dの描画はフレームベースでは行われません。つまり、Event.ENTER_FRAMEイベントは、Starlingフレームワークがわざわざ用意してくれたものです。そのため、import宣言に加わったイベントクラスは、starling.events.Eventになっています。 第2は、少し細かいですが、rotationプロパティの単位です。Flashの(flash.display.)DisplayObject.rotationプロパティと異なり、度数でなくラジアンで定めます。Starlingフレームワークでは、角度はラジアンに統一されています。 [パブリッシュプレビュー]でアニメーションを確かめると、青い正方形のQuadインスタンスが回ります。ただし、もちろん左上角の基準点が中心になります(図003)。 図003■Quadインスタンスが左上角の基準点を中心にして回る Flashであれば、Spriteインスタンスに入れ子にして子インスタンスの位置をずらすか、Matrixクラスにより座標変換をかけるところでしょう。けれど、Starlingフレームワークでは変形の原点がずらせます。 QuadインスタンスのpivotX/pivotYプロパティで、回転の原点を正方形の中心にずらしたのが、つぎのスクリプト004です。なお、初期化のステートメントが増えてきましたので、そのためのメソッド(initialize())を別に設けました。 スクリプト004■青い正方形を中心から回転するStarlingルートクラスの定義
[パブリッシュプレビュー]を確かめれば、青い正方形のQuadインスタンスが中心を原点として回ります(図004)。 図004■Quadインスタンスがその中心を原点にして回る 05 StarlingのStageオブジェクトを参照する Stage.stageWidth/Stage.stageHeightプロパティでStageオブジェクトの大きさがわかりますので、Quadインスタンスを中央に置くことにします。Stageオブジェクトは、インスタンスのstageプロパティで参照します。けれど、初期化のメソッド(initialize())の中でつぎのようにこれらのプロパティを使うと、「nullのオブジェクト参照」だというエラーが示されます(図005)。
図005■「nullのオブジェクト参照」だというエラーが示される ルートクラスのコンストラクタメソッドが呼出されるとき、インスタンスはまだStageオブジェクトを頂点とする表示リストには加えられていません。そのため、stageプロパティの値がnullになってしまうのです。 しかし、ここでもStarlingフレームワークには、addedToStage(定数Event.ADDED_TO_STAGE)という見覚えのあるイベントが用意されています。このイベントを待って初期化すれば、Stageオブジェクトも正しく参照できます。初期化のメソッド(initialize())をaddedToStageイベントのリスナーに加えたのが、つぎのスクリプト005です。 スクリプト005■青い正方形をステージの中心に置いて回転するStarlingルートクラスの定義
[パブリッシュプレビュー]を確かめると、青い正方形のQuadインスタンスがステージの中央で回ります(図006)。 図006■Quadインスタンスがステージの中央で回る このようにStarlingは、ほとんど違う言語ともいえるStage3Dの処理を、表示リストやなじみのあるイベントで扱えるようにした、使い勝手のよいフレームワークなのです。 作成者: 野中文雄 Copyright © 2001-2012 Fumio Nonaka. All rights reserved. |
|||||||||||||