检查/比较类的任何实例中的方法

时间:2013-07-08 19:19:32

标签: java coordinates instance distance

我有两个班级,BasicEnemy.javaUpgrade.java。我在每个方法中都有一个getX()方法,它返回类实例的X坐标。

Upgrade.java ,我希望能够检查BasicEnemy的任何实例的X坐标是否接近任何Upgrade实例的X坐标。目前,我有一行不起作用的代码:

if(main.distance(getX(), getY(), BasicEnemy.getX(), BasicEnemy.getY()) < 15)

main.distance方法使用两组(X,Y)坐标并输出它们之间的距离。)

如何查看任何升级实例是否接近BasicEnemy的任何实例?感谢

2 个答案:

答案 0 :(得分:2)

最简单的方法是循环遍历所有基本敌人,并进行所有升级以查看任何一对之间的距离是否小于您认为“近距离”的距离。

这可以通过使用花哨的算法来改进。如果您有学术感,请尝试使用关键字spacial partitioning进行搜索。

如果您在distance中发布代码,我很乐意为您解决此问题。没有看到它,如果你确定距离计算是正确的,检查用于敌人和升级的坐标是否在同一坐标空间(即两者都是世界坐标)

编辑:

根据您的评论,您对静态意味着什么感到困惑。静态变量在每个类的实例之间共享。在这种情况下,你的敌人肯定不会有静态getX()例程。每个敌人都需要自己的位置,他们没有共同的位置。

所以我建议:

  1. 让您的升级和敌人类具有非静态x和y变量,以及非静态get / set例程。
  2. 将所有敌人实例存储在数据结构中,例如列表。
  3. 将所有升级实例存储在数据结构中,例如列表。
  4. 然后像这样枚举两者:

    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.
            }
        }
    }
    

答案 1 :(得分:0)

您可能想要使用Mediator,这是一个可以向升级实例和BasicEnemy实例发送消息的类,但为此您必须使它们成为同事,因此创建一个通用接口,如。

public interface Targetable{

int getX();

}

现在在你的班级

public BasicEnemy implements Targetable public Upgrade implements Targetable

和Mediator类

  public  class TargetMediator  {
    Set<Upgrade> upgradeables;


    public Targeteable isSomeOneCloseToMe (Targeteable basicEnemy){
                //code here
    }

    }

您可能需要了解此设计模式:Mediator