Stage3Dが現れる前(FlashPlayer10以前)はFlashの透過は割と簡単だったのですが、Stage3Dのせいでややこしくなったようです。
Stage3DってのはFlashで(まあまあ)本格3Dを扱うための機能なので、結構重要です。
Flash(Not Stage3D) + HTML
HTML上で以下のオプションを設定
wmode="transparent"
Flash(Not Stage3D)+NativeWindow
AIRのアプリケーション記述XMLのinitialWindowの項目に以下の設定を追加します。
<systemChrome>none</systemChrome>
<transparent>true</transparent>
Flash(Stage3D) + HTML
できないような気がします。
wmodeにtransparentとdirectの両方を設定したいのですが、それが無理なので。。。
Flash(Stage3D)+NativeWindow
ここからが本題です。
AIRのアプリケーション記述XMLのinitialWindowに以下の設定を追加します。
<systemChrome>none</systemChrome>
<transparent>true</transparent>
<renderMode>direct</renderMode>
ただしこのままだと透明色でクリアしたとしても背景が残ります。
context3D.clear(1, 0, 1, 0);//アルファ0なのに表示されちゃう!
画像の紫の部分が透明になって欲しい部分です。
つまり3D描画は背景のみ透明で表示とかできないっぽいです。
というわけで考えたのがFlashの昔ながらのSpriteに3Dを転写して表示する方法です。
Context3DのdrawToBitmapDataというメソッドを使うと、Bitmapクラスに描画することができるのでそれを使います。
BitmapクラスならいつものようにStageにaddChildで追加して表示できます。
1.Windowの大きさのBitmapクラスをaddChildします。
var bitmap:Bitmap = new Bitmap(new BitmapData(stage.stageWidth, stage.stageHeight, true));
addChild(bitmap);
2.Stage3Dを不可視にします。
初期化とかは通常通りでいいと思います。
描画前にvisibleをfalseにします。
stage3D.visible = false;
3.画面を0でクリアします
context3D.clear(0, 0, 0, 0)
4.Bitmapに3Dを描画します。
context3D.drawToBitmapData(bitmap.bitmapData);
これで完了です。
一番苦労したのは3番です。
r:0、g:0、b:0、a:0だと描画されないのですが(つまり黒にはならない)、r:1、g:0、b:0、a:0とかにすると赤色になってしまうのです。(アルファ0なのに!)
ちょっと仕様として信用してよいのか微妙ですが、とりあえずこれでWin7,8、Macでは背景透明に出来ました!
サンプルは下記URLとかで手に入るらしいですよ(ステマ)
Live2D SDK マニュアル 「Flashでデスクトップマスコットを作ろう」
https://sites.google.com/a/cybernoids.jp/cubism2/simple-app/desctopmascot