2017-10-12 7 views
0

私はJavaを学ぶためにslick2dで作成しているゲームで、複数のレベルのそれぞれにFootballerと複数の他のユニットがあり、フットボールチームと対話できるようにしたいと考えています。私はまた、他のユニットがお互いにやり取りすることを望んでいます(例えば、複数のBallが互いに衝突しています)(これらのユニットのいくつかは、複数のe/gの複数のユニットと同じクラスになることがあります。Defender)。私は、しかし、これらの相互作用を検出し、ユニットを適切に更新する方法は不明です。例えば、私は私のFootballerを持っている:JavaとSlick2d - オブジェクトの相互作用

public class Footballer extends Unit { 
    public Footballer(float x, float y){ 
     super("res/ballerpicture", x, y) 
     } 
    } 

そして、このクラスの中に、私は(私の入力に応じて1 Footballerを移動できるようにユニットのクラスに更新機能を無効にします更新機能を持っている - これはなしで働いています衝突検出以外の問題)。

私はその後、例えば、私のマップ5つのボールの上にロードされている可能性があります。たとえば

public class Ball extends Unit { 
    public Ball(float x, float y){ 
     super("res/ballpicture", x, y) 
     } 
    } 

、私は移動、Footballerとの衝突時のボールのいずれかを更新する方法を知っていただきたいと思いますそれらが衝突するたびにプレーヤーから1タイル離れています。

私のUnitクラスには整数方向(left = 1、right = 2など)に基づいて単位を移動するmoveメソッドが含まれています。

この質問に過度の不満があるか、十分な情報が含まれていないとお詫び申し上げます。

答えて

1

あなたが探しているものはcollision detectionです。 お互いにやりとりできるすべてのオブジェクトは、ヒットボックスを持つことができます。これは、オブジェクトの本体を表す最も簡単な幾何学的形状です。例えば、あなたのボールは半径8pxのヒットボックスとしてサークルを持ち、フットボールのプレーヤーは幅32px、高さ32pxの長方形のヒットボックスを持っていると仮定できます。

両方のオブジェクトが動いているときは、あなたのヒットボックスの境界が互いに交差しているかどうかをチェックする必要があります。

Slick2Dでは、すべてのシェイプにintersects(Shape s)というメソッドがあり、2つのシェイプの境界が交差している場合はtrueを返します。だから、基本的には、オブジェクトのヒットボックスを実装するだけです(オブジェクトが動いているときにヒットボックスを更新してください)、交差をチェックしてください。衝突検出を実装するにはさまざまな方法があり、インターネットはそのトピックに関する多くのリソースを提供しています。 Slick2DのShape documentationもご覧ください。私はあなたのコードを知らないので、あなたのための解決策を書くのは難しいですが、私はあなたがそれを理解し、Slick2Dが交差メソッドの問題に対して簡単に事前に実装されたソリューションを提供すると確信しています。

なんだか、以下のようになります。複数のボールの

編集、:

//in your update method 
for(Ball ball : allBalls){ 
if(footballer.getHitbox().intersects(ball.getHitbox()){ 
//get direction of footballer 
ball.move(...) 
} 
} 
+1

ありがとうございます!これはプレーヤーやボールの更新方法ですか?いくつかのレベルでは複数のボールがある可能性があります - これを回避するにはどうしたらいいですか? –

+0

ゲームのアーキテクチャによって異なります。私はプレーヤーに実装します。すべてのボールをリストに格納すると、交差点の各要素をチェックできます(これは計算集中型です)。しかし、それは基本的にあなたのボールがゲームの世界にどのように格納されているかに依存します。また、これをボールの更新メソッドに実装し、ゲーム内の各ボールの各更新メソッドを呼び出すこともできます。 –

+0

私は自分の投稿を編集して、リストを繰り返して何を意味するのかを示します。 –

関連する問題