StarlingでBlendModeを使った際の落とし穴


はじめに

FlashのStage3Dを活用したライブラリである、StarlingフレームワークでのTipsのご紹介です。
エフェクトなどの表現を作る際、レイヤーのBlendModeをうまく活用すると効果的だと思いますが、注意しないと思わぬ落とし穴に落ちてしまうことがあります。

問題点(落とし穴)

テクスチャにATFファイルを使いBlendModeを使用すると、下図のようにアルファ部分が黒くなってしまうことがあります。左側の星がその症状、右側の星は対処済みのものです。

発生条件

  • Starling 1.4.1 (2013年11月5日での最新バージョン)
  • モバイルデバイスでの再生 (PCでは発生なし)
  • ATFファイルをテクスチャに使用する
  • BlendModeを使用する
  • BlendModeを適用していなレイヤーにアルファを適用している
  • Android 4.1.1 / iOS 6.1.3 / iOS 7.0.3で確認済。

解決策

  • カスタムブレンドモードを作成して使用する。
// カスタムブレンドモードを作成
BlendMode.register("CUSTOM_ADD", Context3DBlendFactor.SOURCE_ALPHA, Context3DBlendFactor.ONE);

※使うときは、お好みのMyBlendModeクラスを作るといいかもです。

まとめ

  • ATF の作成の際、設定を色々変えてテストしてみましたが同様の症状でした。(-0, -2, -4, -c など) おそらく機種依存の問題ではないと思います。
  • 沢山のオブジェクトに対してBlendModeを使う際は親レイヤーに一括して適用した方がお得です。
  • アルファとBlendModeはつい一緒に使いたくなりますが、極力避けた方が色々な箇所でいいコトがありそうです。スケールアニメーションや、スプライトシートを活用するといいでしょう。
  • BlendModeは使い方を間違えると諸刃の剣となるでしょう。

参考