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