Как сделать CollisionCheck () для разных типов столкновений?

Я уверен, что где-то в stackoverflow должна быть статья об этом, но я не могу ее найти ...

Если такой статьи нет, я создаю игру, в которой есть разные типы столкновений между игровыми объектами (в частности: игрок и монстры, пуля и игрок, пуля и монстры, монстры и стена, пуля и стена, игрок и стена. ). На данный момент у меня не так много кода, поскольку я все еще планирую, как это сделать, и это будет первый раз, когда я когда-либо писал игру на C#.

class abstract GameObject {
    public Clear(){
        //Clears the object
    }
}
class Player : GameObject
class Bullet : GameObject
class Monster : GameObject

class Map {
    private List<GameObject> _objectList;    

    public CollisionCheck(GameObject incomingObj, GameObject hitObj) {
        var incRect = new Rectangle(
            incBox.Location.X, 
            incBox.Location.Y, 
            incBox.Width, 
            incBox.Height
        );
        var isCollision = incRect.Contains(hitObj.Location.X, hitObj.Location.Y);
        if (isCollision && hitObj.GetType() == typeof(Player)) {
            Map.Reset();
        }
        if (isCollision && hitObj.GetType() == typeof(Monster)) {
            incObj.Clear();        
            hitObj.Clear();
        }
        //There will be more if's for other cases
    }
}

Пока это все, что у меня есть для CollisionCheck() в Map. Проблема в том, что мне нужно сделать еще несколько, если для еще нескольких случаев. Есть лучший способ сделать это? Я не могу использовать && в операторе switch, поэтому не думаю, что switch подойдет ... Могу ли я использовать enum? Или есть совершенно другой способ проверки столкновений?

Заранее спасибо.

вы пробовали перегрузка? хотя я не уверен, как вы назовете метод Collision, потому что перегрузка - это не серебряная пуля .. Кроме того, это единство? если да, отметьте это.

Bagus Tesa 30.10.2018 01:53

нет, я не использую для этого игровой движок. Также вы предлагаете мне перегрузить метод разными типами GameObjects?

Khang 30.10.2018 01:56

ну да, что-то вроде public CollisionCheck(Player incomingObj, Monster hitObj) ... чтобы уменьшить количество ваших if и switch и позволить компилятору решить, какой метод вызывать автоматически ... хотя, опять же, я не совсем уверен, как вы вызовете этот конкретный метод ... в случае, если GameObject player = new Player() затем передайте это первый параметр примера метода, он не будет разрешен.

Bagus Tesa 30.10.2018 02:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
43
0

Другие вопросы по теме