1

私が作成した AI に攻撃されないようにする単純なゲームを設計しています。

衝突検出について調べていて、質問があります。

私が調べたすべての情報には、かなりのコードの使用が含まれているようです。

なぜ簡単にできないのだろうと思っていました:

if(AI.xDirection == x || AI.yDirection == x || AI.xDirection == y || AI.yDirection == y){
        System.out.println("Collision");

これに使われる?

ご覧のとおり、コンソールに出力するように設定しましたが、うまくいっているようです。

これにデメリットはありますか?

4

3 に答える 3

2

コードが実際に何をしているのかはわかりませんが、それが機能し、理解できるのであれば、なぜそれを変更する必要があるのか​​ わかりません!

于 2012-10-20T21:17:59.497 に答える
1

あなたのコードは、クライアントが気にするのは衝突があるかどうかだけだと想定しています。クライアントが特定の状況で特定の方法で衝突に対処したいゲームやその他のインスタンスがあるかもしれません (たとえば、ランダムな障害物の間でボールを前後に跳ね返すプログラムを少し前に作成しました。最初にヒットすると、その方向に跳ね返らなければなりませんでした)。

このリストは、クライアントが衝突後に何を望んでいるのかについて続きますが、単に衝突を表示したいだけなら、やってみてください。

于 2012-10-20T21:21:10.440 に答える
0

この方法ではカプセル化に違反します。

Prefer は、次のような名前のカスタム オブジェクトを定義します: AIPosition (不変である可能性が高い) AI 座標のカプセル化専用。

メソッドをAIPosition含む:boolean doesCollideWith(AIPosition anotherPosition)

AI委任メソッドが含まれます。

public boolean doesCollideWith(AI anotherAi){
    aiPosition.doesCollideWith(anotherAi.getAIPosition());
} 

あなたの呼び出しは次のようになります。if(ai1.doesCollideWith(ai2))

したがって、後で座標に 3 番目の要素 ( などz) が含まれる場合、クライアント コードを変更する必要はありません。

于 2012-10-20T21:22:25.983 に答える