Flash Player および AIR バージョン 24 のベータ版が公開されました。(Adobe AIR@Labs) 今回は、新機能の数が多く、気合の入った更新になりそうです。新しい SWF バージョンは 35 です。
今回の主な追加機能および変更点は以下の通りです。
- 360° ビデオのサポート (Flash Player, iOS を除く AIR)
- Apple TV (tvOS v9.2 以降) のサポート
- 実行時のパーミッション確認 (iOS, Android)
- スワイプイベントの velocity 属性から操作の速度を取得できる (iOS, Android)
- StageText のカスタムフォントサポート (iOS, Android)
- 非同期テクスチャアップロード (iOS, Android)
- マルチサンプリングによるアンチエイリアス (iOS)
- Android SDK (API Level 24) へのアップグレード
- カメラ、マイク使用のパーミッションを HTTP と HTTPS それぞれ個別に管理
- Firefox での高解像度表示時の品質向上 (Windows)
- Linux 向け PPAPI & NPAPI Flash Player
従来の Flash Player では、ドメイン単位でカメラやマイクの使用を許可する仕様になっていますが、バージョン 24 からは、それに加えて HTTP と HTTPS を個別に扱えるようになります。
Android アプリを targetSdkVersion に 24 を指定して Google Play に提出した場合、その後 AIR SDK 23 (またはそれ以前のバージョン) に戻すことができなくなります。AIR SDK 24 と AIR SDK 23 の入れ替えがありそうな場合は、targetSdkVersion の値を 21 にしておくようにとのことです。
iOS で利用可能になったマルチサンプリングアンチエイリアスは、デスクトップ環境で利用できた機能と同等のもので、Contex3D.configureBackBuffer に引数を指定して有効にします。
Flashと AIR で360° ビデオをサポート
バージョン 24 から Flash Player と、デスクトップ環境及び Android 環境の AIR で、360°ビデオを扱うためのメタデータを取得可能になります。メタデータを取得するには、onMetaData イベントから渡されるオブジェクトに新しく追加された sphericalVideoInfo 属性を参照します。
メタデータのフォーマットは XML の配列です。従って、以下のような手順で XML をパースして、メタデータ内に含まれるビデオの情報を入手することになります。
function ns_onMetaData(info:Object):void { if (event.hasOwnProperty("sphericalVideoInfo") && event.sphericalVideoInfo[0]) { parseXML(new XML(event.sphericalVideoInfo[0])); } }
取得したメタデータを使い、マウスの動きに合わせて VideoTexture に映像を投影するサンプルコードがアドビから公開されています。ZIP ファイル内には、正距円筒図法とキューブマップの 2 種類のプロジェクションマッピングを扱うクラスのサンプルも含まれています。
実行時のパーミッション確認
Android 6.0 から、アプリの実行時に、ユーザがパーミッションを与えるアプローチが採用されました。 (Requesting Permissions at Run Time) パーミッション管理の対象となるクラスは Camera, Microphone, Geolocation, CameraRoll, CameraUI, File, FileReference です。
各クラスには、パーミッション関連の API が新たに追加されます。Android 5.0 以前の環境では、これらの API を使用しても、確認のダイアログは表示されません。そのため従来通りにアプリケーション記述ファイルを使用します。iOS でも利用可能で、iOS のガイドラインでは権限確認が必須とはされていないようですが、選択肢が増えることでよりガイドラインに近いアプリがつくれるようになりそうです。
各クラスに追加される API は以下の 2 つです。
requestPermission(): 確認用のダイアログを表示する permissionStatus: パーミッションの状態
表示されたダイアログへのユーザの入力は、flash.events.PermissionEvent で通知されます。
permissionStatus 属性の値は、flash.permissions.PermissionStatus に定義された 3 種類の値、UNKNOWN,GRANTED, DENIED のいずれかです。デスクトップ向けと、targetSDKVersion の値が 23 以下の Android アプリでは、この値は常に GRANTED です。UNKNOWN は、未確認の状態か、「再確認しない」 にチェックした状態で 「許可しない」 をタップしたという意味になります。
下は、パーミッション関連の API を利用したサンプルのスニペットです。
cam = Camera.getCamera(); if (Camera.permissionStatus == PermissionStatus.GRANTED) { // cam オブジェクトを使用する } else { cam.addEventListener(PermissionEvent.PERMISSION_STATUS, function(e:PermissionEvent):void { if (e.status == PermissionStatus.GRANTED) { // cam オブジェクトを使用する } else { // パーミッションが得られなかった } }); try { cam.requestPermission(); } catch(e:Error) { // パーミッション取得の際に問題発生 } }
同時に複数のパーミッションを確認しようとしたときなどにエラーが発生するようです。エラーの通知には flash.errors.PermissionError が新しく追加されています。
モバイル環境の StageText のカスタムフォント
AIR 24 から、StageText にシステムフォント以外のフォントを利用できるようになります。これは iOS と Android どちらの環境でも有効です。使用できるフォントファイル形式は ttf と otf です。
カスタムフォントを使用するには、まず、アプリケーション記述ファイルに、以下のような記述を追加します。 (Namespace の値を 24.0 以上にするのも忘れずに)
<embedFonts> <font> <fontName>FontID001</fontName> <fontPath>custom_font_folder/fileName1.ttf</fontPath> </font> <font> ... </font> </embedFonts>
これで、ActionScript コードから、fontName タグで指定した名前でフォントを呼び出せるようになります。
public function CustomFonts() { label = new StageText(); label.fontFamily = "FontID001"; label.stage = stage; label.viewPort = new Rectangle(20, 20, 90, 90); }
Flash Builder で .apk ファイルをパッケージする場合、フォントへのパスは絶対パスの指定が必要です。また、Windows 環境で Java 1.6 を利用している場合は、otf ファイルが IPA では表示されないという制限があるようです。
モバイル環境で非同期テクスチャアップロード
AIR 24 では非同期のテクスチャアップロード処理がサポートされ、 描画処理中に次のテクスチャをアップロードするような処理が可能になります。非同期のアップロード用には新しい API が 2 つ追加されました。
uploadFromBitmapDataAsync(source:BitmapData, miplevel:uint = 0) uploadFromByteArrayAsync(data:ByteArray, byteArrayOffset:uint, miplevel:uint = 0)
非同期のアップロードが成功すると、TEXTURE_READY イベントが発行されます。
この機能がサポートするテクスチャは、Texture と RectangleTexture です。また、miplevel に指定できる値は 0 のみとのことです。
コメントする