-1

私は過去に同様の質問についてスレッドを作成しましたが、詳細が不足しているため、回答は実際には必要なものとは関係がありませんでした。そのため、質問をできるだけ詳細に説明してみます。あなたが私が必要としているものを理解するために。

バッキーの洗練されたゲームチュートリアルをYouTubeで見て、2D Javaゲームを作成しました。ゲームは基本的に、上から見た2Dプレーヤー(バーズアイビュー)で、ユーザーキー入力(上、下、左、右)で2Dマップを移動できます。プレイヤーが移動するマップは非常に小さいため、プレイヤーがマップから離れないように境界を設定する必要がありました。これがどのように行われたかをよりよく理解するために、境界を設定するためのチュートリアルを次に示します。 :

http://www.youtube.com/watch?v=FgGRHId8Fn8

ビデオはまた、ゲームがどのようなものかを正確に示します。問題は、これらの境界には1つの軸しか必要ないということです。つまり、プレーヤーが歩いている場合は、「プレーヤーがX軸の座標(数値)に到達したら、プレーヤーの動きを反対方向に変更して、移動できないようにします。それ以上。" これは1つの軸しか必要としないため、セットアップと理解が簡単であるため、これは私にとって問題になりますが、ビデオを見ると、マップ上に家があり、プレーヤーがその上を歩けないようにしたいと思います。しかし、これは2次元を扱っています。長方形の衝突のようなものを見て、他の投稿でそれらに関連するものを見てきましたが、私はJavaに不慣れで、Buckyを見る以外は、現時点ではあまり多くのことをしていないので混乱します。チュートリアル。

現在の私のゲームクラスのコードには、init、render、updateのメソッドがあります。要約すると、私は本当にプレイヤーに家の中を歩かせない方法を設定したいと思います。私はJavaに非常に慣れていないので、(他のスレッドで言及する必要があります)また言及します。衝突の設定方法を段階的に説明します。必要に応じて長方形を作成するなどの基本的なことも意味します。

私のコードが必要な場合は教えてください。できるだけ早く投稿します。

前もって感謝します。

4

3 に答える 3

0

2つの可能なオプション:

  1. ShapeまたはRectangleまたは関連するSlickオブジェクト(IMOが存在する必要があります)を拡張し、次のことを確認します。intersect()

  2. 外側から始まり内側で終わるような値を探してください(x1,y1)(x2,y2)

あなたがintersect()メソッドを持っていると仮定します:

//Grab the previous position
prevPosX = movingobject.X;
prevPosY = movingobject.Y;
//Update the position
movingobject.update();

//Test for collision
if(movingobject.intersects(targetobj)) {
    //If it collided, move it back 
    movingobject.X = prevPosX;
    movingobject.Y = prevPosY;
    //And reverse the direction 
    //(might want to do other stuff - e.g. just stop the object)
    movingobject.speed *= -1;  //Reverse the speed
}
于 2012-12-25T22:36:05.863 に答える
0

この場合、更新クラスは、家を探すための条件をもう 1 つ追加する必要があります。家の座標 (x と y の値を変更するだけの長方形の家を想定) が (x1,y1)(x1,y2)(x2,y2)(x3,y1) であるとします。 x 値が x1 と x2 の間にないことを確認し、同時に y 値が y1 と y2 の間にあることはできません。

于 2012-12-25T22:58:14.627 に答える
0

「isBlocked」などのプロパティを持つクラスの 2x2 グリッドとしてボードを設定できます。デフォルトでは、ボードの端でこのプロパティが true に設定され、キャラクターが端から離れないようになっています。家や壁などの他の障害物を追加すると、オブジェクトが占めるグリッド位置にもプロパティが true に設定されます。次に、キャラクターを移動するときに、キャラクターが移動するグリッド位置のプロパティが false に設定されているかどうかを確認して、それが許容される移動かどうかを確認します。これにより、レベル データの保存も非常に簡単になり、後でディスクからロードすることができます。

于 2012-12-25T22:40:56.167 に答える