-1

Retina 解像度 (約 200 フレーム) の Flash ムービークリップと、内部にいくつかの Action Script があります。stage3d を使用してパフォーマンスを向上させたいと考えています。Action Script を失うことなく、ムービークリップを stage3d ステージに追加することは可能ですか?

4

2 に答える 2

0

いいえ、stage3d を単に「有効化」して機能させることはできません。

Starling フレームワークを調べてください。これが最も簡単な方法かもしれません (テキスト入力がない場合は、多少の回避策が必要になります)。ただし、コードのいくつかを変更する必要があります。単純なプラグ アンド プレイではありません。

于 2013-10-15T03:54:39.267 に答える
0

簡単な答え: いいえ。

長い答え: 正確ではありません。出力に関係なく、ActionScript は引き続き同じ方法で実行されます。ただし、GPU でレンダリングしたいコンテンツがある場合は、それを ActionScript コードから分離する必要があります。同じムービークリップを実行し、すべてのフレームをオンザフライで GPU に送信する必要があります。これは大量のリソースを消費します。GPU はレンダリング時に優れていますが、そこにデータ (「テクスチャ」) を取得する必要があり、これには時間がかかります。この GPU へのアップロードは複雑であり、実際のボトルネックになる可能性があります。フレームごとに行うべきではないことは確かです。その場合でも、とにかくムービーを draw() する必要があるため、最後のブリッティング中のパフォーマンスの向上は意味がありません。

アニメーションが小さくて十分に短い場合は、すべてのフレームをタイル化されたアニメーション (スプライト シートなど) と同じ単一のビットマップにレンダリングできます。次に、この大量の画像 (ほとんどの場合、最大 2048x2048、新しい GPU では 4096x4096) をハードウェアにアップロードし、(UV) マッピング座標を変更して「フレーム」を変更します。これは、Flash でアニメーションを再生する最も速い方法です。ただし、前述のように、すべてのフレームを (オンザフライであるかどうかにかかわらず) 同じ画像に合成し、一度アップロードする必要があります。200 フレームの場合、これを可能にするには、アニメーションのサイズを 146x146 (多かれ少なかれ) にする必要があるため、複雑になる可能性があります (さらにスプライトシートが必要です)。

もちろん、フレームごとに 1 つのテクスチャを使用することもできます。ロードするのは少し面倒ですが、うまくいきます。その後、 Starling の MovieClip のようなものを使用して再生することができます。しかし、再び ActionScript が失われます。たとえば、常にフレームをチェックするなどして、何らかの方法でコードに再度追加する必要があります。

別の解決策として、アニメーションをビデオにして、代わりに StageVideo を使用することもできます。複雑なコンテンツをアニメーション化するのに最適で、より適しています。

TL;DR: ハードウェア アクセラレーションは Flash で優れていますが、定義上、特定の状況でしか機能しません。Flash の方が適切に処理できるものもあります。

于 2013-10-07T22:32:28.110 に答える