Display Classesの最近のブログ記事

マウスイベントの続きということで、遅ればせながら SimpleButton クラス (livedocs@lab) の説明です。

SimpleButton クラス

SimpleButton は InteractiveObject のサブクラスで、マウスの操作に応じてボタンらしく振舞うことができます。 Flash オーサリングツールでボタンシンボルを作成すると4つのフレームができますが、SimpleButton にもそれぞれのフレームに対応したプロパティが存在します。

public upState : DisplayObject        // アップ(通常)の状態の表示オブジェクト
public overState : DisplayObject      //(マウス)オーバーの状態の表示オブジェクト
public downState : DisplayObject      //(マウス)ダウンの状態の表示オブジェクト
public hitTestState : DisplayObject   // ヒットテスト用のオブジェクト

これまで紹介してきたクラスは flash.display パッケージに含まれているクラスの主要メンバーです。少し乱暴な言い方をしてしまうと、flash.display パッケージは AS2 での MovieClip が持っていた役割を再編成したものと言えるでしょう。各クラスの役割も明確になり、使いやすくなったのではないかと思います。AS2 には無かったコンセプトがいくつも出てきましたが、AS3 でプログラミングする上では外せない部分ですので実際にいろいろと試してみていただければと思います。まだアルファ版のため ”本当はこう動くはずじゃないかな?” という期待と違う動きをすることもしばしばあります。どうもバグらしいと思ったら時間のあるときで構いませんのでレポートしてください。英語が面倒な方は、当面私宛に送っていただいてもOKです。

説明だけでは分かりにくかったかも、ということで最後に簡単なサンプルコードを載せておきます。(HelloWorld です。ベタで済みません。) サンプルコードでは、コンストラクタがいわゆる main() 関数の代わりをしています!ActionScript3 ではスクリプトだけで Flash アプリケーションが出来てしまうのですね。もう fla ファイルとか mxml ファイルとかの単なる補助ではありません。ここに AS3 の可能性をちょっと感じてしまったりします。

Stage クラスは Flash コンテンツの描画領域に対応するクラスです。(livedocs@lab) DisplayObject は Stage のインスタンスの領域上に表示されます。AS2 での Stage はグローバルオブジェクトでしたが、AS3 では DisplayObject.stage プロパティからアクセスします。

Stage にはいくつかの便利なイベントがあり、Flash Player と OS 間のフォーカス情報などを知ることが出来ます。

activate    : Flash Player が OS からフォーカスを貰ったとき  
deactivate  : Flash Player が OS のフォーカスを失くしたとき 
mouseLeave  : マウスポインターが Stage の領域外に移動したとき
resize      : scaleMode=noScale で Stage の大きさが変更されたとき

Sprite クラス

Sprite は、基本的には DisplayObjectContainer をそのまま具象クラス化したものと見做せるでしょう。(livedocs@lab) 子オブジェクトの管理やユーザーインタラクションの実現など、Flash コンテンツを開発する上でコアになる機能を提供します。 (DisplayObjectContainer + InteractiveObject + DisplayObject

DisplayObjectContainer から追加されている主な機能ははドラッグ&ドロップ操作への対応くらいです。下記はそのメソッドです。

public startDrag(lockCenter:Boolean = false, bounds:Rectangle = null) : Void
public stopDrag() : Void

Sprite のサブクラスである MovieClip よりも軽いので、AS3 では開発の中心となるクラスと位置づけられています。UIComponent のベースクラスも AS3 からは Sprite に変更されました。(というわけで UIObject クラスも必要なくなりました。) また、なにより new Sprite() と書けるのが嬉しいところです...というのは、AS2 を書いたことのない人には関係ない話でしたね。

Loader クラス(livedocs@lab)は、SWF ファイルを読み込んだり、JPEG, PNG, GIF 等のイメージデータを読み込むのに使います。Loader のメソッドは以下のとおりです。

public load(request:URLRequest) : Void    // 指定された URL からロード
public unload() : Void                     // 読み込んだオブジェクトの削除
public close() : Void                      // 実行中のロードをキャンセル
public loadBytes(bytes:ByteArray) : Void  // 引数からデータをロード

読み込まれたオブジェクトは Loader の子オブジェクトになります。Loader.content プロパティからこれを参照することが出来るようになっています。Loader は DisplayObjectContainer のサブクラスですが、子オブジェクトを一つしか持つことが出来ない特殊なクラスです。このため子オブジェクトを追加/削除する類のメソッドを呼び出すと例外が投げられます。

loadByte メソッドはちょっと面白いメソッドで、メモリ上のバイナリデータから SWF や GIF, JPEG, PNG のオブジェクトを作成することができます。

次は、InteractieObject のサブクラスで「コンテナ」機能が追加された抽象クラスです。

DisplayObjectContainer クラス

DisplayObjectContainer クラス(livedocs@lab)は、その名のとおり DisplayObject のコンテナ、つまり他の DisplayObject を子オブジェクトとして持つことの出来るクラスです。一方 DisplayObjectContainer 自身も DisplayObject ですから子オブジェクトになることができます。つまり DisplayObject のツリー構造を作ることが出来ます。(末端ノード以外は DiplayObjectContainer である必要があります) Flash の経験者であれば MovieClip が入れ子になっているものをイメージするとよいでしょう。

このように、DisplayObectContainer は画面に表示されたオブジェクトをまとめて管理するのに使われます。DisplayObjectContainer (およびそのサブクラス)が子オブジェクトを管理する仕組みをディスプレイリストと呼んでいます。

DisplayObject クラスのサブクラスとして Bitmap と Shape を紹介しましたが、次は、もう一つのたぶん一番良く参照されるサブクラスです。

InteractiveObject クラス

DisplayObject クラスにユーザーインタラクションのためのイベント等を追加した抽象クラスが InteractionObject クラス(livedocs@lab)です。概念的には、画面に表示されて、マウスやキーボード入力に反応するオブジェクトをモデル化したものと考えることができるでしょう。(ということは、Bitmap や Shape は、ユーザーが直接操作できないわけです。) InteractiveObject の直接のサブクラスには SimpleButton や TextField などがあります。この InteractionObject クラス(のサブクラス)はフォーカスの制御の単位にもなります。

これにより、AS1/2 では何種類もあったユーザーイベントの扱いが一つのクラスに集約され、すっきりと統一されました。AS2 の Key や Mouse といったグローバルオブジェクトによるユーザーイベントのハンドリングは AS3 にはありません。

イベントモデル自体も、新しくなっています。AS3 の新しいイベントモデルについては、重要なトピックですので別の機会に改めて詳しく説明したいと思っています。今回はとりあえず主なイベントの種類だけざっと触れておきます。

Bitmap クラス

Bitmap クラスはビットマップ画像を表示するのに使用されます。(livedocs@lab) Bitmap クラスの役割は表示位置やフィルターの種類の指定などの表示状態を指定することで、実際のビットマップデータは Bitmap.bitmapData プロパティから参照される BitmapData クラスのインスタンスが持ちます。Bitmap はあくまで容れ物ということです。

BitmapData クラスについては Flash8 から追加されたものと基本的に同じです。(livedocs@lab) 描画オブジェクトのスナップショットを取ったり、様々な加工を施すことができます。AS1/2 では、MovieClip に attach して使用していましたが、AS3 では Bitmap が MovieClip の代わりをします。

BitmapData のインスタンスは複数の Bitmap オブジェクトから共有できるため、画面にたくさんのビットマップ画像を表示しても、メモリを効率的に使用できるようになっています。

ActionScript3 では、API が大幅にリパッケージングされています。これは、描画機能が集約された重たい MovieClip への依存からの脱却が目的の一つで、描画関連の機能にも新しい考え方やクラスが導入されています。AS3 を使うにはこれらのクラスを理解しなくてはなりません。そこで、AS3 の新しいモデルについて、少し説明をしたいと思います。まずは少し抽象的な話から始めます。

注:以下の内容は、パブリックアルファ版に基づくもので、製品版までには変更されることがあります。

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261