【发布时间】:2022-01-11 19:34:42
【问题描述】:
请帮帮我,我有实体类,其中碰撞器功能。
class Program
{
static void Main(string[] args)
{
Player player = new Player();
Enemy enemy = new Enemy();
enemy.Collide(enemy, player);
}
}
public abstract class Entity
{
public virtual void Visit(Enemy enemy) { }
public virtual void Visit(Player enemy) { }
public virtual void Visit(Entity enemy) { }
public virtual void Collide(Entity ent1, Entity ent2)
{
ent2.Visit(ent1);
}
}
public class Enemy : Entity
{
public override void Visit(Enemy enemy) { }
public override void Visit(Player enemy) { }
}
public class Player : Entity
{
public override void Visit(Enemy enemy) { }
public override void Visit(Player enemy) { }
}
例如,我有 2 个实体 Player:Entity 和 Enemy:Entity;
在Collide方法中调用Visit方法时,ent1为Player,ent2为Enemy,必须调用子类Enemy::Visit(玩家玩家)的方法,但Entity::Visit(Entity实体)方法被调用。
同时在输出ent1.GetType()的时候会写自己是Player,ent2.GetType()是Enemy。为什么编译器会这样做以及如何解决它?
如果我在 Player 中手动施放 ent1,那么一切正常,但我需要多功能性,因为我的游戏中有更多对象。
【问题讨论】:
-
为什么这被标记为 C++ 和 C#?它似乎是 C#。请发帖minimal reproducible example。