最も簡単な方法は、すべての基本的な敵とすべてのアップグレードをループして、任意のペア間の距離が「近い」と考える距離よりも短いかどうかを確認することです。
これは、高度なアルゴリズムを使用することで改善できます。spacial partitioning
アカデミックな気分になったらキーワードで検索してみてください。
コードを投稿していただければ、distance
喜んで修正いたします。それを見なくても、距離の計算が正しいと確信している場合は、敵とアップグレードに使用される座標が同じ座標空間にあることを確認してください (つまり、両方ともワールド座標です)。
編集:
あなたのコメントに基づいて、静的が何を意味するのか混乱しています。静的変数は、クラスのすべてのインスタンスで共有されます。getX()
この場合、あなたの敵は静的なルーチンを持たないはずです。すべての敵には独自の位置が必要であり、単一の位置を共有しているわけではありません。
だから私は提案します:
- アップグレードと敵のクラスに、静的でない x 変数と y 変数、および静的でない get/set ルーチンを持たせます。
- すべての敵インスタンスをリストなどのデータ構造に保存します。
- すべてのアップグレード インスタンスをリストなどのデータ構造に格納します。
次に、次のように両方を列挙します。
for(int i=0;i<enemies.size();i++){
Enemy enemy = enemies.get(i);
for(int j=0;j<upgrades.size();j++){
Upgrade upgrade = upgrades.get(j);
if(main.distance(enemy.getX(),upgrade.getX(),enemy.getY(),upgrade.getY())<15){
//enemy is close to upgrade.
}
}
}