Примите во внимание следующее: существует 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));
Однако я 'Я не уверен, действительно ли это самый быстрый / лучший подход, поскольку этот метод становится слишком сложным очень быстро, когда добавляется больше типов коллайдеров.