不同类之间的Java碰撞检测

时间:2017-05-23 17:01:00

标签: 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 ) { ... }

    ...
}

它不会起作用,因为没有“pos”等等,所以我怎么能这样做才能适用于每个班级呢?我已经阅读过有关界面但我真的不知道它对我有什么帮助。

2 个答案:

答案 0 :(得分:3)

好吧,如果你想,你可以做这样的事情来获得对象的pos.x

((Player)a).pos.x

但是,虽然这可能满足您的需求,但我建议您创建一个界面,例如

public interface GameObject{
    public Vector3 getPosition();
}

并使所有“游戏对象”实现它,然后执行

boolean doCollide (GameObject a, GameObject b)

不仅第一种方法是不好的做法,而且在编译时更难以进行扩展,这通常是一个不好的迹象。

答案 1 :(得分:3)

您可以将public interface IsomeName{ public Vector3 getPosition(); } 类型转换为您自己的类型,但考虑到有多种自定义对象类型,尝试采用该方法有效,因此您可以使用接口。

接口声明:

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()

另一种选择是使用抽象# admin.py # imports go here... source = Source() source.save() excerpt1 = Excerpt(source=source) book = Book() book.save() except2 = Excerpt(source=book.source) # source=book may also work; haven't checked... book2 = excerpt2.source.book if book is book2: except2.save() # only save this if my code is correct... 方法创建一个抽象基类,并让每种类型提供它们自己的实现。