Java 不同类之间的冲突检测

标签 java collision

我正在制作一个关于射击敌人和避开障碍物的简单游戏,但我在检测碰撞方面遇到了问题,因为我为每种类型的游戏对象(玩家、敌人、障碍物、掉落、子弹、等)。

class Player { Vector3 pos; ... }
class Enemy { Vector3 pos; ... }
class Obstacle { Vector3 pos; ... }
...

boolean doCollide (Object a, Object b)
{

    if ( a.pos.x + a.size.w >= b.pos.x ) { ... }

    ...
}

它不会工作,因为 a 没有“pos”等,那么我怎样才能做到它适用于每个类(class)?我读过有关接口(interface)的内容,但我真的不知道它对我有什么帮助。

最佳答案

您可以将 Object 类型强制转换为您自己的类型,但是考虑到存在多种自定义对象类型,尝试采用该方法效率不高,因此您可以使用一个接口(interface)。

接口(interface)声明:

public interface IsomeName{
      public Vector3 getPosition();
}

你的类(class):

class Player implements IsomeName{ @Override public Vector3 getPosition(){...}};
class Enemy implements IsomeName{ @Override public Vector3 getPosition(){...}}
class Obstacle implements IsomeName{ @Override public Vector3 getPosition(){...}}

那么你的doCollide将变成:

boolean doCollide (IsomeName a, IsomeName b)
{      
    ...
    ...
    ...
}

另一种选择是创建一个带有抽象 getPosition() 方法的抽象基类,并让每种类型提供自己的实现。

关于Java 不同类之间的冲突检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44140942/

相关文章:

Unity3D 碰撞器更像海绵而不是实体

Java 和集合 :When to use a linked list of arrays?

java - 从该网站隐藏 html 元素的表格中获取信息的最佳方法是什么?

java - 使用分段上传将文件放入 Amazon S3

java - 正则表达式保持一致的人名

datetime - 如何计算预期碰撞频率

javascript - 用javascript实现四叉树碰撞?

java - 如何使用 OpenCsv 下载 csv 文件而不写入它

python - Pygame - 矩形并排碰撞

julia - 在 Julia 中模拟粒子碰撞