ゲーム開発におけるFlashのパフォーマンス: ネイティブレンダリングとBitmapDataフレームバッファの比較 質問する

ゲーム開発におけるFlashのパフォーマンス: ネイティブレンダリングとBitmapDataフレームバッファの比較 質問する

私は2Dシューティングゲームを開発していますたくさんの物そして積極的なスクロール

質問:どちらの方法が良いでしょうか?

選択肢 1 - ネイティブ Flash レンダリングを使用する:

  • ビットマップからゲームオブジェクトを派生し、既存の x、y、幅、高さ、ビットマップデータを使用する
  • すべてのオブジェクトを子として追加します UIComponent.addChildren(...) を画面に追加します
  • 「scrollRect」を使用して可視領域をクリップする

選択肢 2 - 「ビットマップ + copyPixels」を使用してカスタム レンダリングを記述する

  • x、y、幅、高さ、ビットマップデータを持つ独自のゲームオブジェクトを使用する
  • 画面にビットマップを追加し、そこからビットマップデータを取得します
  • すべての ENTER_FRAME を再描画します: bitmapData.lock()、ゲーム オブジェクトを反復処理して copyPixels() を bitmapData に実行し、次に bitmapData.unlock() を実行します。
  • カスタムクリッピング: 画面外のオブジェクトをレンダリングしない

ここでは質問「bitmap + copyPixels()」は遅いと不満を言う人もいます。

実験:私は両方のテクニックを実装しました:

ぜひ試してみて、どちらが優れているか(より高速、よりスムーズ、CPU の消費が少ない)をお知らせください。

そうなるまで待って少なくとも250人の敵(画面上のカウンター)。
アップデート:タスクマネージャー(または$top)を開いて、全体的なCPU使用率を確認してください。

更新2:コードを変更したので、クリープの出現がずっと速くなりました。

ベストアンサー1

更新: 高負荷バージョンをありがとうございます。繰り返しになりますが、ただ走り回っているだけでは違いはわかりませんでした。しかし、私は巧妙に「r」が砲塔を落とすことを突き止め、20~30 個の砲塔を落としたとき、ネイティブ バージョンは手動バージョンよりもいくらか遅くなったので、私が間違っていたのかもしれません。(メモリ使用量に違いは見られませんでした。) ネイティブで処理すると、より高速になる可能性があるように思われますが、何らかの不透明な特殊な処理が必要になる可能性は十分にあります。

これが受け入れられたので、別の回答へのコメントで述べたことを明確にするためにメモを追加します。すべてのアセット自体がビットマップである場合、HanClinto が指摘しているように、イベント構造などの表示オブジェクトに関連するオーバーヘッドがなくなるため、ネイティブ オブジェクトを作成して Flash に処理させるよりも、手動で合成する方が高速になることは驚くことではありません。

ただし、ビットマップにレンダリングする必要があるベクター コンテンツや、アニメーション化されたスプライトが多数ある場合、またはアクターのマウス イベントを検出する必要がある場合 (独自の合成を行う場合は、手動で行う必要があり、おそらく面倒です) など、手動で行う方が有利になる状況も考えられます。

したがって、手動合成を遅くするようなことをする必要がなければ、これが間違いなく最善の答えであると思われます。また、そうする必要がある場合は、両方のアプローチを試してみるのが確実に確認する最善の方法です。(マウス イベントを必要とするネイティブ オブジェクトのレイヤーを 1 つ作成し、それを手動で合成したビットマップのレイヤーでオーバーレイまたはアンダーレイするハイブリッド モデルも可能です。)

おすすめ記事