Я уверен, что где-то в 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? Или есть совершенно другой способ проверки столкновений?
Заранее спасибо.
нет, я не использую для этого игровой движок. Также вы предлагаете мне перегрузить метод разными типами GameObjects?
ну да, что-то вроде public CollisionCheck(Player incomingObj, Monster hitObj) ... чтобы уменьшить количество ваших if и switch и позволить компилятору решить, какой метод вызывать автоматически ... хотя, опять же, я не совсем уверен, как вы вызовете этот конкретный метод ... в случае, если GameObject player = new Player() затем передайте это первый параметр примера метода, он не будет разрешен.





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