私は、プレイヤーが探索するときに地形の新しいチャンクを生成するゲームを持っており、一見無制限のレベルサイズを可能にします。完全に機能していますが、キャラクターを長い間一方向に移動させることにしました。最終的には次のエラーが発生します。
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
新しいポイント座標でメインに再描画されます。