2

私は、プレイヤーが探索するときに地形の新しいチャンクを生成するゲームを持っており、一見無制限のレベルサイズを可能にします。完全に機能していますが、キャラクターを長い間一方向に移動させることにしました。最終的には次のエラーが発生します。

ArgumentError: Error #2015: Invalid BitmapData.
        at flash.display::BitmapData/ctor()
        at flash.display::BitmapData()

このコード行で:

this.new_chunk.background_bitmap_data = new BitmapData(this.level_obj.block_size *  this.new_chunk.blocks_wide + this.level_obj.oversize_bmd_offset,this.level_obj.block_size * this.new_chunk.blocks_tall + this.level_obj.oversize_bmd_offset,true,0x00000000);

ビットマップデータの作成に使用されている幅と高さの値を提供する変数/方程式を実行しtrace();ました。意図したとおり、同じ値が常に出力されます。

2150 1300

私はキャラクターをさまざまな方向に走らせましたが、最終的には方向に関係なく同じことが起こります。BitmapData常に2150x1300なので、大きくなりすぎないことはわかっています。

注:小さなエリアにいる間はエラーは発生しません。ゲームをどれだけ長く実行したままにしても、エラーは一方向に長時間移動した後にのみ発生し、多数の新しいレベルのチャンクが生成されます。

フラッシュがこのエラーをスローする理由はありますか?

編集:

これがゲームのライブデモで、何が起こっているのかをよりよく理解できるようになっています:http: //test.webskethio.com/boxy/

(コントロールは移動用のWASDであり、シフトを押し続けると移動が速くなります。)

各「チャンク」はゲーム画面自体のサイズであり、各チャンクはそれを構成するBitmapDataすべての小さいBitmapDataもの(草、木、岩、花などのタイル)のキャッシュを格納します。チャンクBitmapDataはにロードされますBitmap。チャンクがステージに十分近く、レンダリングが必要になる可能性があるステージ。

編集2:

多くのBitmapDataオブジェクトのストレージを必要としない、エイミーが提案したゲームのレンダリング方法を説明するために、写真をアップロードしました。

ここに画像の説明を入力してください

四隅の色付きの領域は、画面上のBitmapDataオブジェクトに描画されるオブジェクトですBitmap(ユーザーの画面と同じサイズで、緑色で表示されます)。全体の周りの黒い領域は、ある時点で他のBitmapDataオブジェクトであった可能性があるものを表します。null不要になったため、に設定します。

プレーヤーが移動すると、4つのコーナーのBitmapDataオブジェクトがBitmap新しいポイント座標でメインに再描画されます。

4

1 に答える 1

1

エラーを再現できませんでした。

私はシフトを使って約5分間真北に走っていましたが、メモリ消費量が3 + GiBに増えた後、RAMを使い果たしたため、スワップを使用し始め、非常に遅くなりました。

ですから、メモリが足りなくなっただけだと思います。その場合、フラッシュのエラーは少し奇妙です。古いビットマップを解放するか、再利用することをお勧めします。推奨されるアプローチは、通常、常に画面サイズの4つのビットマップを使用し、東に行くときに東の新しい領域に西のビットマップを再利用し、その逆も同様で、南北に同じです。

また、非常に迷惑な白い縞模様が点滅しているのがわかります。それが実際の理由かどうかはわかりませんが、通常、誰かがダブルバッファリングを使用しない場合に発生します。

于 2012-07-10T10:50:40.750 に答える