2

私はJavaでMinecraftの2Dリメイクを作成することに精通しています。私はそれがうまくいくことができることを知っています、ユーチューブのorange451は私にこれを作ろうと試みるように促しました。マップ上のすべてのブロックがテキストファイルから読み込まれ、ゲームが読み込まれると、テキストファイルのすべてのブロックがArrayListに追加されます。ゲームでカーソルが置かれているブロックのインデックスを計算するアルゴリズムを作成し、MouseListenerを追加して、クリックするとブロックがエアブロックに置き換えられるようにしました(基本的にブロックを破棄します)。ArrayListのブロックを置き換えるために、ArrayList set(index、obj)メソッドを使用しました。理論的には、正しく機能しているはずですが、ある意味では機能します。唯一の問題は、数ブロック離れたマップに黒いスペースが作成されることです。特に私がここまで来たので、これは非常にイライラします。追加情報:衝突検出メソッドもArrayListを使用してブロックの位置を検出するため、ArrayList内のオブジェクトを置き換えるメソッド、またはそれを行うためのより良い方法が必要です。私を助けてください!画像を投稿することはできませんが、ブロックを空気のテクスチャに設定していますが、その近くに黒い正方形(arraylist mabeyのギャップ?)を作成しています。投稿するコードが多すぎるため、プロジェクト全体のソースコードを次に示します。 Blockworld2Dソース

4

1 に答える 1

4

座標を知っているオブジェクトのArrayListは、この2D構造を表す非常識な方法であるため、これに苦労しています。順序付けされていません。ArrayListを逆にするかシャッフルすると、同じように描画されます。置き換える前に適切な座標のオブジェクトをArrayListで検索する必要があるため、O(N)が更新されます。同じ座標を持つ複数のオブジェクトを持つことができます。表示されている座標に対応するオブジェクトがまったくない状態になっている可能性があります。これは、ここで遭遇したことです。

私を助けてください

わかった。バイトの2次元配列(ArrayListではなく配列)から始めます。これにより、256種類のブロックが可能になり、プレイヤーは常にあなたのnew AirBlock(0, 0)狂気に記憶を割り当てることなく掘ることができます。世界を描くには、表示されている座標を繰り返し処理し、バイトをビットマップなどにマップします。

また、2DMinecraftはすでに存在します。それはTerrariaと呼ばれています。

于 2012-02-17T09:56:07.420 に答える