Adobe Labs に Flash Player 11.6 と AIR 3.6 のベータ版が公開されました。バージョンは、Flash Player が 11.6.602.105、AIR が 3.6.0.535 です。
今回の主要な新機能は以下の 4 つです。
- フルスクリーン表示許可を求めるダイアログの UI 改善
ダイアログボックスの表示位置を画面の中央に変更。フルスクリーン表示への移行の際に、キャンセルボタンを追加 - Graphics オブジェクト内 のグラフィックデータ取得
実行時に Sprite や Shape からグラフィックデータの情報を IGraphicsData のベクターとして取得できる。子オブジェクトのデータを含めることも可能 - 複数の SWF を使った iOS アプリ開発のサポート
複数の SWF ファイルをパッケージしておいて実行時にロードできる。AIR 3.5 で一旦公開された機能の復活 (参考:Adobe AIR 3.5 の iOS 関連の新機能) - 特定の iOS デバイスに対し使用を除外する解像度を指定
アプリケーション記述子内で requestedDisplayResolution タグを使って、iOS デバイスの種類ごとに使用しない解像度を指定できる
このほかにもフィードバック収集を目的とした (つまり、正式に公開される時点では含まれない) 機能として、Stage3D の拡張プロファイルが公開されています。
これらの新機能を使用するには、コンパイラの引数に、ターゲットとする SWF のバージョンとして 19 を指定します。また、AIR の場合は、名前空間に 3.6 の指定が必要です。
<application xmlns="http://ns.adobe.com/air/application/3.6">
ダウンロードは以下のページです。
- Download Flash Player 11.6 Beta (アンインストーラや playerglobal.swc も提供されてます)
- Download Adobe AIR 3.6 Beta
ActiveX 版の Flash Player は Windows 8 では動作しません。Windows 8 用の更新は、通常の OS アップデートの一部として行われるようです。
また、リリースノートによると、今回から iOS のサポートは 5.0 以降になったもようです。サポートするデバイスに変更は無いようですが。 (最終確定かは不明です)
グラフィックデータの取得
今回 Graphics クラスに readGraphicsData() メソッドが追加されました。これにより、実行中に、画面に表示されているベクター画像の情報を取得することができます。
function readGraphicsData(recurse:Boolean=true):Vector.<IGraphicsData>
このメソッドは、Graphics オブジェクト内のベクター描画データを IGraphicsData の Vector として取得できます。従来から提供されていた drawGraphicsData() メソッドのちょうど逆の動きです。
引数に true を指定すると (デフォルトの動作)、子の DisplayObject からもベクター描画データを取得します。その場合、座標変換済みのデータとして取得され、同じ座標空間内にあるものとして扱えます。
今のバージョンだけの制限かは不明ながら、IGraphicsData のサブクラスでも一部対応していないものがあります。また、取得可能なオブジェクトでもいくつか制限があります。
以下は取得可能なオブジェクトと、その制限です。
- GraphicsBitmapFill
matrix の値はほぼ合っているが完全に正確なものではない
repeat の値は常に true
smooth の値は常に false - GraphicsEndFill
- GraphicsGradientFill
matrix の値はほぼ合っているが完全に正確なものではない - GraphicsPath
サポートされている commands は move_to, curve_to, line_to のみ
(cubicCurveTo() 等は未サポート) - GraphicsSolidFill
- GraphicsStroke
thickness はサポートされる
fill は GraphicsSolidFill, GraphicsGradientFill, GraphicsBitmapFill を上記の制限付きでサポート
他の属性値はデフォルト値になる
取得できないデータは (いまのところ) 以下の通りです。
- GraphicsShaderFill
- GraphicsTrianglePath
- マスク
- テキスト (アニメーション優先のアンチエイリアスを選択した場合のみベクターとして扱われる)
- ブレンド
- Scale9
- Scrollrect
- 2.5D
- 不透明な背景
- 表示されていないオブジェクト
使用しない解像度の師弟 (iOS デバイス)
AIR 3.6 から、<requestedDisplayResolution> タグに excludeDevices という属性が追加されました。
<requestedDisplayResolution> は、アプリが使用する解像度を宣言するためのタグですが、excludeDevices を使うと、その解像度の対象外とする iOS デバイスを指定できます。
<requestedDisplayResolution excludeDevices="iPad3,1">high</requestedDisplayResolution>
上の例では、"iPad3,1" というモデルを、Retina ディスプレイを使用するデバイスから除外しています。
複数のモデルを指定する場合は以下のようになります。
<requestedDisplayResolution excludeDevices="iPad3,1 iPad3,2">high</requestedDisplayResolution>
あるモデルの全てのバリエーションを一括して指定することもできます。
<requestedDisplayResolution excludeDevices="iPad3">high</requestedDisplayResolution>
上の例では iPad3 の系統が全て Retina を使用する対象ではなくなります。
製品名だけを指定することもできます。全ての iPhone で Retina ディスプレイを不使用にしたければ、以下のような指定になります。
<requestedDisplayResolution excludeDevices="iPhone">high</requestedDisplayResolution>
いまのところ、解像度の指定は high か standard しかないので、どちらかを不使用に設定すると自動的に他方の解像度が有効にされます。従って、下の指定は iPhone のみ Retina を使用したいときに利用できます。
<requestedDisplayResolution excludeDevices="iPhone">standard</requestedDisplayResolution>
ここで指定に使用しているデバイス名は、 flash.system.Capabilities.os property から取得できるものです。一応、以下がそのリストだそうです。 (念のため手持ちのデバイスで確認してください)
iPod4,1 iPod Touch 第4世代 iPod5,1 iPod Touch 第5世代 iPhone2,1 iPhone 3GS iPhone3,1 iPhone 4 iPhone3,2 iPhone 4 CDMA iPhone4,1 iPhone 4S iPhone5,1 iPhone 5 iPad1,1 iPad iPad2,1 iPad 2 Wifi iPad2,2 iPad 2 GSM iPad2,3 iPad (Retina display & A5) CDMA iPad2,4 iPad (Retina display & A5) CDMAS iPad2,5 iPad Mini Wifi iPad3,1 iPad (Retina display & A5) Wifi iPad3,2 iPad (Retina display & A5) CDMA iPad3,3 iPad (Retina display & A5) GSM iPad3,4 iPad (Retina display & A6X) Wifi
複数の SWF を使った iOS アプリ開発
今のところリンケージ以外のメリットが無いので
swfよりswcを使う気がする。