サイトトップ

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

Adobe Flash非公式テクニカルノート

Starlingフレームワーク1.4の新しい機能

ID: FN1309003 Product: Flash CS6 and above Platform: All Version: 11 and above/ActionScript 3.0

2013年9月23日にStarlingフレームワーク1.4が公開されました。パフォーマンスの向上のほか。そのおもな内容を9月24日づけのblog記事「Starling 1.4」にもとづいてご紹介します。


01 概要

Starlingはこのリリース1.4でさらに磨きがかかりました。さまざまな手が加えられて、ゲームなどの処理はより速く、安定的になります。しかも、コードは何ひとつ書替えずに済みます。また、新しいAIRの機能もすべて対応しています。たとえば、テクスチャの4096×4096ピクセルのサポートやRectangleTextureクラス、16ビットテクスチャといった新しいオプション、あるいはAIR 3.9から可能になるiOSのバックグラウンドの実行などです。


02 パフォーマンスの向上

Starlingフレームワークすべてにわたって最適化を施しました。たとえば、つぎのような項目です。これまでより10%パフォーマンスがよくなります。

  • Event.ENTER_FRAMEイベントは、このイベントに加えられたオブジェクトだけに効率よく送られる。
  • DisplayObjectクラスの内部で行われる行列演算を最適化。
    • オブジェクトのアニメーションを描くときに重要。
  • 事前コンパイラ(AOT)による要らないメモリ割当てを減らした。
    • ガーベジコレクションの負荷が下がる。
    • メモリ割当ての状況はScoutで調べた。

03 Sprite.clipRectプロパティ

Sprite.clipRectプロパティを使って、Spriteオブジェクトに任意の矩形でマスクが加えられます(シンタックス001)。矩形でマスクするには、つぎのように1行のステートメントを書き加えるだけです(「Starling Demo」の[Clipping]参照)。

Spriteオブジェクト.clipRect = new Rectangle(x座標, y座標, 幅, 高さ);

図001■「Starling Demo」の[Clipping]
図001

シンタックス001■Sprite.clipRectプロパティ
Spriteクラス
パッケージ starling.display
継承 Sprite → DisplayObjectContainer → DisplayObject → EventDispatcher → Object
clipRectプロパティ
文法 clipRect:Rectangle
プロパティ値 Spriteインスタンスの座標系における矩形領域でマスクする。オブジェクトは矩形内のみ描かれる。直交座標の軸はステージにもとづくので、インスタンスとともに回転・傾斜はしない。
実装 public function get clipRect():Rectangle
public function set clipRect(value:Rectangle):void

04 DisplacementMapFilterクラス

DisplacementMapFilterクラスが加わり、DisplayObjectインスタンスを動的にピクセル単位でゆがめられます。つぎのような水面の揺らぎのサンプルコードがGitHubに掲げられています。


*「Starling 1.4」「DisplacementMapFilter」より。

05 失われたコンテキストの扱い

Apple以外のデバイスでは、何らかの理由でデバイスコンテキストを失ったときクラッシュしないために、静的プロパティStarling.handleLostContexttrueに定めておかなければなりません。これまでは、Starlingがテクスチャデータをメモリにもつことで、コンテキストが失われたときテクスチャを復元しました。新バージョンでは、もとのテクスチャを読込み直します。そのため、Starlingが費やすメモリは、前より50%少なくて済みます。とくにモバイルでは、これは大きな違いです。

AssetManagerクラスを使っていれば、テクスチャデータは自動的にメモリされます。つまり、Starling 1.4にアップデートするだけでよいのです。

アセットの扱いを自ら最適化することも難しくありません。新たなConcreteTexture.onRestoreイベントハンドラにコールバックを定めれば、コンテキストが失われたときに呼出されます。たとえば、コンテキストがなくなった場合、つぎのようにもとのテクスチャを読込み直します。おおもとのデータから復元しますので、メモリにため込まずに済むのです。

texture.root.onRestore = function():void {
  // もとのテクスチャを読込み直す
  texture.root.uploadBitmap(new EmbeddedAsset());
};


06 AssetManagerクラスの改善

AssetManagerクラスに備わったのは、失われたコンテキストの自動的な最適化だけではありません。テクスチャとサウンドに加えて、汎用XMLやJSON、さらに生のByteArrayデータが扱えるようになりました。

    【これまでどおり扱えるアセット】
  • PNGやJPGおよびGIFのテクスチャ
  • MP3サウンドファイルのサウンド
  • アトラスのテクスチャとビットマップフォントの自動認識
    【新たに扱えるアセット】
  • キューに加えたJSONファイルから各データが納められたObjectインスタンスをつくる
  • キューに加えた汎用のXMLファイルからXMLオブジェクトをつくる
  • その他のデータをByteArrayオブジェクトとして扱う

07 テクスチャサイズの拡大とRectangleTextureクラス

2048×2048ピクセルを超えるテクスチャが使えないかというのは、これまでとても多い要望でした。それが、AIR 3.8の機能でできるようになりました。生成するContext3DオブジェクトのプロファイルにContext3DProfile.BASELINE_EXTENDEDを定めることにより、テクスチャが4096×4096ピクセルまで扱えます(ただし、デバイスがサポートしていなければなりません)。

もうひとつAIRに加わった役立つ機能は、低レベルのテクスチャタイプを扱うRectangleTextureクラスです。Stage3Dのテクスチャは、これまで幅と高さのピクセル数が2の累乗でなければなりません。Starlingでは、内部的にメモリを使ってこの制限は外しました。Starling 1.4ではさらに、可能な場合には自動的にRectangleTextureが内部的に用いられ、費やすメモリを抑えます(Context3DProfile.BASELINEプロファイルからサポートされます)。


08 HiDPI(MacBook Retina)のサポート

最新のMacBookの優れた解像度を使うには、つぎのふたつを行うだけで済みます。

もし、Retinaディスプレイをおもちなら、前述04「DisplacementMapFilterクラス」のデモの水面をよくご覧ください。解像度がフルに使われているのを確かめられるでしょう。


09 その他の機能

他にも多くの追加や修正があります。詳しくは「Starling: Changelog」をご覧ください。おもな項目はつぎのとおりです。

  • TextField.autoSizeプロパティの追加
  • ステージのスクリーンショットを得るStage.drawToBitmapData()メソッドの追加
  • テクスチャパック形式およびランタイムテクスチャ圧縮のサポート(後者はデスクトップのみ)
  • 最新のATFファイル形式のサポート
  • Starling.stop()メソッドの引数にレンダリング停止の引数を追加(AIR 3.9のバックグラウンド実行への対応)
  • AssetManagerでコンテキストが失われたときに配信されるEvent.TEXTURES_RESTOREDイベントの追加
  • タッチ処理のカスタム化をサポート(TouchProcessorのサブクラス化)
  • キーボードイベントをすべてのDisplayObjectインスタンスに配信するように改訂
  • DisplayObjectContainer.sortChildren()メソッドのソートアルゴリズムを安定化
  • マウスとタッチスクリーンが両方使える複数イベントサポートの修正
  • MovieClip.advanceTime()メソッドの特別な場合のバグを修正
  • タッチを終えたときTouchPhase.HOVERイベントが起こらない問題を修正(マウスを動かさないとハンドカーソルに戻らなかった)

作成者: 野中文雄
作成日: 2013年9月28日


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