こんにちは、私は最近 Java を学び、2D タイル ベースのゲームを作成しています。ゲームループとすべてのタイルベースのものを問題なくセットアップしましたが、これで頭を壁にぶつけています... 簡単に思えますが、私はそれで最も苦労しています. 4方向の動きを止めたいのですが、うまく動かないようです。このように使用すると、上下が停止しますが、側面衝突を追加するとすぐに上に移動します。なぜなら、x < x 誰かがより良い解決策やアルゴリズムを持っている場合は、私に知らせてください! ありがとう!
ここに私のセットアップに関するいくつかの詳細情報があります
ゲーム スレッド (ゲーム ループ) を開始するメイン スレッドがあります。ゲーム ループは、スクリーン マネージャー用の「部屋」を生成します。部屋を拡張する MapScreen というクラスがあります。この「部屋」には、タイル配列と Player クラスが含まれています。衝突は、部屋の更新メソッドをオーバーライドするメソッドで MapScreen で処理されるため、メインのゲーム ループがすべてを更新します。プレーヤーの瞬間は、プレーヤークラスのメソッドで制御されます。配列への参照をプレーヤーに渡すことができ、タイルがブロックされていないかどうかを確認するだけで、何か新しいことを試してみたいと思う前に、そのようなことをしました。
これが私の現在のコードです:
for (int x = 0; x < 50;x++){
for (int y = 0; y < 50; y++){
if (player.rect.intersects(tiles[x][y].rect) && tiles[x][y].blocked == true ){
//Top
if (player.rect.y < tiles[x][y].rect.y){
player.rect.y -= 10;
}
if (player.rect.y > tiles[x][y].rect.y){
player.rect.y += 10;
}
}
}
}
たとえば、ここにサイド (左) を追加しようとすると:
if (player.rect.y < tiles[x][y].rect.y){
player.rect.y -= 10;
}
if (player.rect.y > tiles[x][y].rect.y){
player.rect.y += 10;
}
if(player.rect.x < tiles[x][y].rect.x ){
player.rect.x -= 10;
}
上記のコードはちょっと動作します。-_-