1

UI に「オン ファイア エフェクト」を追加しようとしています。BitmapData と PerlinNoise などを使用してこれを達成しています。

問題は、BitmapData を使用して何かを行うと、次のエラーが発生する場合に発生します。

 ArgumentError: Error #2015: Argument error: Invalid BitmapData.
    at effects::FireFX/updateBitmaps()...

これと同じくらい簡単なことで、エラーが表示されます。

displayBmp = new BitmapData(200, 200, true, 0);
scratchBmp = displayBmp.clone();

私の場合、clone() や perlinNoise() や colorTransform などの関数がクラッシュを引き起こしています。

Animate CC でのデバッグ/実行は問題なく動作します。

PD: Scaleform を使用して Flash 10.3 に公開: 4.1.19

ありがとう

4

1 に答える 1

1

バージョン 4.1 の時点で、Scaleform は BitmapData API をサポートしています (参照)。ただし、4.1.19 は 4.1 の最初のリリースであり、BitmapData をサポートする最初のリリースです。最初のリリース以降、BitmapData サポートには確かに修正が加えられているため、新しいバージョンにアップグレードすることをお勧めします。

このエラーが発生する最も一般的な理由は、最後のパラメーターとしてThreadCommandQueueインスタンスを渡さないことMovieDef::CreateInstanceと、最初のフレームで BitmapData 操作が使用されていることです。のインスタンスThreadCommandQueueがないと、レンダラーは Scaleform 内の BitmapData オブジェクトのバッキングを作成できません。それ以降のバージョンでは、よりわかりやすい警告が Scaleform に追加されました。

の場合ThreadCommandQueue、アプリケーションのレンダリング コードと適切に統合するには、通常、これを自分で実装する必要があります。最も単純なマルチスレッド実装はThreadCommand、 から呼び出されたときに (スレッドセーフな) リストにオブジェクトを格納し、アプリケーションのレンダリング ループ中のある時点でオブジェクトをPushThreadCommand呼び出すだけです。Execute

SDK の以降のバージョンでは、SingleThreadedCommandQueueすべてのコマンドをすぐに実行する基本的な実装を提供する というクラスが提供されています。これは、同じスレッドでMovie::Advanceとを使用している場合にのみ機能します。クラスの Scaleform サンプルで使用されているHAL::Display、より複雑なバージョンの実装を見ることができます。これは、重要な実装のほとんどを.ThreadCommandQueueRenderHALThreadRTCommandQueue

于 2016-08-30T18:39:03.647 に答える