2

我想为我的游戏设置一个碰撞处理程序,这样我就不必复制大量代码并保持存储空间短。在我将在一个类中使用的方法中,对于两个特定对象,它看起来像这样。

   //Inside collision class     
   public void checkCollision(Block block, Ball ball){
   //do stuff with the variables given
   }

这意味着我只能检查块 + 球的碰撞

我的问题是:是否可以更改给定的对象,例如,我可以使用相同的方法并仅解析对象,例如地板对象和球,但有时使用块和球。

有时地板也不可用,所以如果它想要全部三个,我不能只解析块和球

它可以让我不必投入

    public void collision(Block block, Floor floor, Ball ball){
    }

不明白的请追问,万分感谢

查尔顿桑塔纳

4

3 回答 3

2

如果你有这样的方法怎么办:

// ...
public void checkCollision(Collidable a, Collidable b) {
    a.collideWith(b);
}

和一个界面

public interface Collidable {

    SomeReturnType collideWith(Collidable coll);
}

在这种情况下,您可以Collidable与另一个处理collideWith方法中的碰撞的人发生碰撞。

这只是一个想法,尚不清楚您要如何实现此效果。因此,如果您扩展答案,我可以进一步帮助您。

于 2013-05-15T10:52:31.970 回答
0

您可以使用集合和泛型,例如:

    public void void checkCollision(List<? extends Collidable> objects) {
    // test whatever you want

}

这样,您可以使用相同的方法来测试 2-n 对象碰撞,其中对象必须是 Collidable 类的子类,因此您可以保持它的类型安全,而不是使用 List。

注意:没有理由给 Android 贴上标签,“Pure Java”用户可能会给你更多答案。也许把 API 设计或其他东西作为标签更合适。

于 2013-05-15T11:45:09.367 回答
0

重载方法

public void collision(Block block, Floor floor, Ball ball){
   //do stuff
}

public void collision(Floor floor, Ball ball){
   //do stuff
}

public void collision(Block block, Ball ball){
   //do stuff
}
于 2013-05-15T10:55:54.957 回答