2011-05-31 2 views
2

私は、点と半径を持つDot型の配列と、点とサイズを持つ矩形のPlayerを持っています。どのようにして2つのクラス間の衝突や反応がありますか?

プレイヤーが配列内のどのドットにも触れる/衝突するかどうかを常にテストするメソッドを作成します。どこでコードを書いて、パラメータとして渡す必要がありますか?

これは、プレイヤーがドットをかわす必要があるゲーム用です。これまでのところ私はこれのようなものを持っています。

for (int i = 0; i < NUM_DOTS; i++) { 
    if (player.intersects(dotPos[i])) { 
     gameOver = true; 
    } 
} 
+1

これらの[質問と回答](http://stackoverflow.com/search?q=%5Bjava%5D+%5Bswing%5D+intersects)も参照してください。 – trashgod

答えて

1

どのようなフロントエンド技術を使用していますか? Swing/AWTの場合は、変更をリッスンできるイベントリスナーを提供します。 Webアプリケーションの場合、submission/AJAXアクションは変更を探すことができます。

本当に一般的な場合は、新しいスレッドを作成し、実行メソッドにリスナーコードを設定する必要があります。

+0

swing/awt.eventを使用しています – James

+0

ユーザーが方向を変更したときにアクションリスナーを使用できます。マウスのような特定のものがあります。 (http://download.oracle.com/javase/tutorial/uiswing/events/actionlistener.html)。また、ポーリングがイベントに関連付けられていない場合は、javax.swing.Timerを使用できます。 –

1

java.awt.Shapeインターフェイスを実装するクラスを使用することが許可されている場合は、intersects()メソッドの1つが役に立ちます。

1

も、lerpは、それが役に立つかもしれように聞こえる

+0

リンクや詳細を提供できますか? – trashgod

+0

lerp(線形補間)は2点間の線を求めます。あなたのプレイヤー/ドットが常に直線上を常に動いているならば、lerpを使ってポイント/ドットが互いに接触できるかどうかを調べることができます。 lerpは実装が非常に簡単で、多くの言語で共通の方法ですが、Javaの基本的なlerp関数を考えることはできませんが、wikiページ[link]をチェックしてください(http://en.wikipedia.org/wiki/Linear_interpolation ) –

+0

を計算する方法のかなり簡潔な説明のために(それらの美しさは、2つがパスを交差するかもしれないかどうか一度チェックすることができるということです。あなたの問題を解決するには、他の交差法の1つを使う必要がありますが、それは計算を減らすのに役立ちます –

1
私はコードを書くだろうと私はパラメータとして渡すために何が必要です

アプリケーションには、ユーザーの移動時に検出するイベントハンドラがあります。ゲームの性質によって、ユーザーが移動するたびにチェックを行うことができます。 keyListenerを使用しているとしましょう。keypressedイベントハンドラでは、forループを使用して衝突を判断する必要があります。

さらに、ドットを動かすスレッドを実行しているかもしれません(ドットは移動しますか?)。これは、衝突をチェックするコードを配置できる別の場所です。

関連する問題