【发布时间】:2019-02-05 14:13:38
【问题描述】:
考虑以下几点:
有一个 abstract class Collider 和一些扩展此类的更多类,例如RectCollider 和 CircleCollider。
这些的多个实例都在同一个List<Collider> colliders。
现在,我的问题是我应该如何检查这些碰撞器之间的碰撞,同时保持它们之间的兼容性。例如,我想检查 RectCollider 和另一个 RectCollider 之间的冲突,这与检查 RectCollider 和 CircleCollider 不同。
到目前为止,我的想法是使用一种方法来检查碰撞器的类型(通过 instanceof),然后根据结果调用不同的方法:
public Collision getCollision(Collider a, Collider b) {
if(a instanceof RectCollider) {
if (b instanceof CircleCollider) {
return rectCircle(a, b);
}
else if (b instance of RectCollider) {
return rectRect(a, b);
}
}
else if(a instanceof CirlceCollider) {
if (b instanceof CircleCollider) {
return cirlceCircle(a, b);
}
else if (b instance of RectCollider) {
return rectCircle(b, a);
}
}
else {
return null;
}
}
目前调用该方法的方式:
getCollision(colliders.get(i), colliders.get(i+1));
但是,我不确定这是否真的是最快/最好的方法,因为当添加更多 Collider 类型时,这种方法会变得非常复杂。
【问题讨论】:
-
如果你在 Collider 的每个实现上都实现了
getCollision(Collider b),那会不会那么混乱。代码量将是相同的,但会在实现中分开。在性能方面,没有真正的区别。
标签: java methods types instanceof