Stalingフレームワークの歩み

# はじめに
こんにちは。Flashとはなんとver.3から戯れているharayokiと申します。今回はStalingフレームワーク(http://gamua.com/starling/) についての投稿です。

![title-logo.png](https://qiita-image-store.s3.amazonaws.com/0/8302/c478d0e8-7b36-b0cd-755e-31d42aceb1da.png)

Flash(AIR)でスマホ用アプリ、主に 2Dをゲームを作る際のデファクトスタンダードとなっているGAMUA社のStalingですが2012年2月のリリースからバージョンアップを重ね、この記事を書いている2015年末現在では Ver.1.70が最新となっています。また、次バージョンは初のメジャーバージョンアップとなるVer.2.0がリリースされる予定です。

Starlingを実際に業務で使っている方でも、バージョンごとの細かい差異、最近追加された機能まで把握されている方は多くはないかと思います。下記に時系列順で筆者が重要と思う項目とともにまとめてみますので、なにかの参考となればと思います。なお、文中で太字になっている箇所は、表現・デザイン面で重要と思われる部分です。バグフィックスとパフォーマンス改善についてはあまり言及しません。

# リリースの歩み

## v0.9 リリース 2011/9/11
Stage3Dテクノロジー(GPU)を用いて、従来よりずっと高速に描画処理を行うコンテンツが、従来のFlashAPIと近いプログラム(MovieClipやSpriteを扱う)方法で作れるということで、発表とともに大変に注目を浴びました。FlashAPIからヒントを得て作られたiOS用のフレームワークである同社製のSparrow( http://gamua.com/sparrow/ )をFlashに逆輸入したという変わった経緯を持ちます。
同様にStage3Dを用いた2DフレームワークであるN2D2フレームワークと比較され、どちらがメジャーになるか議論されたりしました。
**パーティクル**の生成は拡張機能扱いですが、すでにこのバージョンから対応しています。

## v0.91 リリース 2011/12/11
1.0リリースに向けての準備といった感じでしょうか。余談ですが、この頃のGAMUA社はまだ個人宅のリビングルームで活動していたようです。

## v1.0 リリース 2012/2/24
AIR3.2とともにモバイル対応した最初のバージョンです。偉大な一歩ですが、１つのイメージの描画ごとに１ドローコールを使ってしまうなど、パフォーマンス的にもまだまだなものであったようです。

## v1.1 リリース 2012/5/6
* **ブレンドモード**がサポートされました。乗算、スクリーン、加算など。
* FPSやメモリ使用量をモニタリングして画面の端に表示する、お馴染みのStat機能が搭載されました。

## v1.2 リリース 2012/8/15
立て続けのリリースで気合い入ってます。
* 大幅なパフォーマンス改善がなされました。メモリ面の改善やEventクラスの再実装など。
* それぞれメジャーなStage3D用3Dフレームワークである**Away3DやFlare3Dと共存**できるようになりました。
　(Starling側にUIとパーティクルなどを担当させるのが一般的な利用方法のようです。)
* ディスプレイオブジェクトの**平行四辺形変形**(skewing)が可能になりました。
* StatにDrawコール数の表示が追加されました。

## v1.3 リリース 2013/1/14
* 各種**フィルターの適用**が可能になりました。ぼかし、シャドウ、光彩、カラー調整など。
* Assetmanagerが実装され、外部アセットの管理が楽になりました。

なお、Staling本体ではないですが、Stalingに依存したライブラリであるFeathers(UIライブラリ)、CitrusGameEngine(横スクロールジャンプ系ゲームに特化したゲームエンジン)、DragonBones(Spineのようなキャラクターアニメーションツール)などがこの頃登場しています。

## v1.4 リリース 2013/9/23
* **矩形マスク機能**が使えるようになりました。
* **DisplacementMapFilter**に対応し、複雑な変形処理がフィルタで行えるようになりました。
* 4kテクスチャに対応し、縦横幅ドット数が２の倍数でない場合もメモリ効率良く扱えるようになりました。
* 今表示している画面の**スクリーンショット**が撮れるようになりました。
* Retinaマック対応がなされました。
* タッチ判定クラスをカスタム化できるようになりました。

この頃、StarlingのJavaScript対応( http://preview.gamua.com/area-51/ )がアナウンスされましたが、スポンサー難のため開発リソースが避けなくなったということで、その後Away3D開発元のAway Foundationに開発が引き継がれています。 http://gamua.com/blog/2014/02/starling-js/

## v1.41 リリース 2013/10/15
1.4リリースにclipRect関連のバグがあり、これがFeathers利用時にクリティカルになるということで、修正リリース1.41が出されました。他、細かい調整あり。

## v1.5 リリース 2014/5/21
若干地味な内容のリリースですが、ChangeLogを見るとたくさんの更新があります。
* TextureAtalas画像内の90度回転したパーツ画像配置の読み込みに対応しました。これにより、より効率的な画像のパックが可能になりました。
* タッチ対象DisplayObjectのグループ化が可能になりました。
* 起動時間が大幅に速くなりました。

## v1.51 リリース 2014/5/26
HTTPStatusEvent関連のバグ修正リリースです。他はありません。

## v1.6 リリース 2014/12/12
* **Sprite3D**機能が搭載され、簡易3D表示が可能となりました。3Dモデルの表示などはできませんが、DisplayObjectを3D座標上で管理でき、3D座標軸で回転する事も可能になりました。
* **フィルタを入れ子適用**できるようになりました。 (古いAndroidでパフォーマンス注意）
* **レンダーテクスチャーにもフィルタ適用が可能**になりました。 (古いAndroidでパフォーマンス注意、レンダーテクスチャー＝動的にプログラムで描画可能なテクスチャ)
* trueTypeフォント仕様の場合、**HTMLテキスト表示**が可能になりました。
* ボタンクラスにマウスオーバーとdisable時の見た目を設定できるようになりました。

## v1.7 リリース 2015/7/2
* **矩形以外の形状のマスク**に対応しました。
* Flashのgraphicsクラス相当である**Canvasクラス**が追加されました。 (※現在マスク形状の指定専用かも？ >main use right now: masking)
* **Texture Mask**(ビットマップマスク)が実装されました。
* **ビデオテクスチャー**に対応しました。
* **テキストフィールドにleadingプロパティ**が追加されました。

以上となります。4年ほどの間に精力的なアップデートがされてきた事がわかりますね。

# おわりに

上記のリリース詳細一覧はStarlingForumの内容、Staling BlogのポストおよびGithub上のChangeLogやソースコードから得られる情報を元に作成しました。筆者が使った事のない機能(Canvasでのマスクなど)も含まれるため、細部が事実と異なる事もありえますが、その際はコメントなどいただければと思います。

次リリースとなるStarling2.0については、時間とネタ量とカレンダーの空きがあれば、また別の日に投稿したいと思います。よろしくお願いします。