Adobe Flash Player 11.3とAIR 3.3が正式に公開されました。最新のバージョンは11.3.300.257です。新たな機能はAdobeのThibault Imbert氏がByteArray.org「Introducing Flash Player 11.3 – AIR 3.3 beta」で紹介されています。その内容をまとめました(スクリプトはこの記事から引用しています)。
タイムラインの処理がしやすいように、FrameLabelオブジェクトにイベントリスナーが加えられるようになりました。イベントはFrameLabel.frameLabel(定数Event.FRAME_LABEL)です。詳しくは、「ラベルが定められたFrameLabelオブジェクトにイベントリスナーを加える」をお読みください。
[例]
var frame:FrameLabel = mc.currentLabels[0]; frame.addEventListener(Event.FRAME_LABEL, onFrame);
Windowsでは、すでにFlash Player 11.2で備わっていた機能です。Flash Player 11.3からMacOSでも、自動更新できるようになりました。これでどちらの環境でも、Flash Playerが早く普及するようになるでしょう。
この改良により、Sound.play()メソッドを呼出したり、SoundTransformオブジェクトのボリューム(SoundTransform.volume)やパン(SoundTransform.pan)を変えたときも遅れが少なくなりました。SampleDataEvent.SAMPLE_DATAイベントの遅れも大幅に減っています。入力サンプルサイズ2048で遅延は最適化されます。
サポートするすべてのコーデックで、バッファされないライブオーディオ再生の遅れが減ることを目指しました。この機能を使うには、ふたつの設定が必要です。第1に、バッファなしの再生にするため、NetStream.bufferTimeプロパティの値は0にしなければなりません。第2に、新たに備わったNetStream.useJitterBufferプロパティをtrueにすれば機能が働きます。
フルスクリーンモードのSWFで、キーボードからのキー入力をすべてサポートできます。そのためには、ふたつの設定が要ります。
第1に、新たなHTMLのパラメータを有効にします。
<param name="allowFullScreenInteractive" value="true" />
この設定は、新らしい読取り専用のプロパティStage.allowsFullScreenInteractiveで確かめられます。
trace(stage.allowsFullScreenInteractive);
フルスクリーンでキー入力できるようにするには、Stage.displayStateプロパティに新しい定数StageDisplayState.FULL_SCREEN_INTERACTIVEを設定します。
stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
アップロードするmipレベルを、低解像度から高解像度まで自由な順序で決められます。そして、Stage3Dのテクスチャをプログレッシブローディングできます。
[例]
[Embed(source = "MipLevel9.jpg")] var MipLevel9:Class; var context3D:Context3D; var texture:Texture; stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, createdHandler); stage.stage3Ds[0].requestContext3D(Context3DRenderMode.AUTO); function createdHandler(e:Event) { context3D = stage.stage3Ds[0].context3D; // 512のテクスチャサイズにストリーミングレベル9を設定して1×1のmipレベルにする(mipレベル0は512でmipレベル9が1) texture = context3D.createTexture(512, 512, Context3DTextureFormat.BGRA, false, 9); var mip9:Bitmap = new MipLevel9(); texture.uploadFromBitmapData(mip9.bitmapData,9); }
Flash Player 11.2では、サポートするドライバは2008年1月1日以降とされました(11では2009年)。将来のリリースでは、対応するドライバを2006年1月1日以前にまで拡げる予定です。Flash Player 11.3/AIR 3.3の公開ベータでは、フィードバックを得るため、この緩和が行われました。しかし、blogの著者Thibault Imbert氏のtweetによると、つぎのリリースに持ち越されたようです。
Stage3Dがソフトウェアにフォールバックされたとき、context3D.driverInfoプロパティからその理由が得られるようになりました。理由には4つあり、つぎのような文字列で値が返されます。
[パブリッシュ設定]で[ハードウェアアクセラレーション]が正しく選ばれていないため、Stage3Dでソフトウェアレンダリングされています。
ハードウェアのグラフィックスドライバが既知の問題によりブラックリストに入れられているため、Stage3Dでソフトウェアレンダリングが用いられました。ドライバを更新すれば解決します。
ドライバの能力か一般的なブラックリスト化によりハードウェアが使えないか、ハードウェアグラフィックスの初期化で問題が生じたため、Stage3Dでソフトウェアレンダリングが用いられています。
コンテンツからStage3D.requestContext3D()メソッドにより、Stage3Dのソフトウェアレンダリングが求められています。
つぎのベータでは、判別の処理が書きやすいよう、これらの戻り値には新たなクラスの定数が用意されます。
ユーザーがInteractiveObjectインスタンスの上で押したマウスボタンを、プレスしたままインスタンスの外に出して放したときに配信されるイベントです。詳しくは、「クリックしたインスタンスの外でマウスボタンを放したときのイベント」をお読みください。
[例]
s.addEventListener(MouseEvent.RELEASE_OUTSIDE, onReleaseOutsideHandler);
これまで備わっていたApplicationDomain.getDefinition()メソッドでは、取得したい定義の名前を文字列で引数に渡さなければならず、クラス名を予め知らないと使えませんでした。新たに加わったApplicationDomain.getQualifiedDefinitionNames()メソッドはSWFから、すべてのpublicクラスの完全修飾名が取出せます。戻り値は、完全修飾名を文字列エレメントとして納めたVectorオブジェクトです。その完全修飾名をApplicationDomain.getDefinition()メソッドに渡せば、定義の参照が得られます。
[例]
var definitions:Vector.<String> = this.loaderInfo.applicationDomain.getQualifiedDefinitionNames();
BitmapData.draw()メソッドと同じ働きをするメソッドに、描画品質の引数を加えたのがBitmapData.drawWithQuality()です。Stage.qualityプロパティでステージのレンダリング品質を変えてから、BitmapData.draw()メソッドを呼出すという手間が要らなくなります。詳しくは、「BitmapData.drawWithQuality()メソッド」をお読みください。
[例]
bitmapData.drawWithQuality(sprite, sprite.transform.matrix, null, null, null, null, StageQuality.BEST);
ネイティブのJPEG/PNG/JPEG-XR圧縮をサポートします。
[例]
var bitmapData:BitmapData = new BitmapData(640, 480, false, 0x00FF00); var byteArray:ByteArray = new ByteArray(); bitmapData.encode(bitmapData.rect, new JPEGEncoderOptions(), byteArray);