2012-12-24 24 views
0

我正在尝试自定义碰撞器类,您可以在其中将两个对象传递给方法,并且如果两者中的任何一个发生碰撞,请执行某种操作。对象而不是实例的碰撞测试

例如,我想提出一个射击游戏,和我想要做的是说:

  • 如果任何Ship碰撞与任何子弹Bullet
    • 毁坏两个受影响Ship和影响Bullet
  • 否则
    • 什么都不做

我想要做的就是一次写这个,而不是每颗子弹和/或船舶。所以,我想这样做是这样的:

ColliderEvent collide = new ColliderEvent(); 
collide.hit(Ship, Bullet, new Runnable(){ 
    @Override 
    public void run(){ 
     // Destroy bullet and ship here 
    } 
}); 

然后在我的主要游戏线程,我会做一些事情,将测试如果某种hit方法进行了规定,两个物体碰撞在某些时候,和如果是的话执行第三个参数传递到hit

所以,有没有办法做到这一点,而不通过船舶/项目符号的实例hit方法?

+0

假设一艘船比一颗子弹大,你可以创建一个“位置”对象,让一艘船返回一个“Set ”方法并检查一个子弹的位置是否包含在船的位置集中?这当然意味着'Position'正确地实现了'equals()'和'hashCode()'... – fge

+0

我同意..如果你想,你可以为所有对象创建一个onCollision()函数并实现它在一个超类。 – Joel

+0

我觉得你只是想为每个船舶/子弹组合执行这种方法。两个嵌套循环将完成此操作。 –

回答

1

我会尝试使用events and listeners来处理库中的这种情况。基本上,你会有一个类来检查整个地图是否有碰撞。如果发生碰撞,它会在对象类(子弹或船)中调用一个方法(您实现),告诉他们它们发生了碰撞。