所以,我正在创建一个带有实体系统的游戏。
公共类Bullet:实体
公共类Npc:实体
公共类坦克:实体
公共类实体
一个实体只是有一些功能: 更新(),渲染()
我创建了一个如下列表:
List<Entity> entities = new List<Entity>();
我循环浏览所有这些并调用更新() / 渲染()
但是存储的项目符号或 Npcs 将不会使用其更新或渲染功能进行调用。
TL; DR
如何使用Update / Render函数存储不同的类,并在循环中为所有类调用它。
实体
class Entity
{
public void Update(GameTime gameTime, GraphicsDevice gd, Player p, Tilemap tm, EntityManager em)
{
}
public void Draw(SpriteBatch sb)
{
}
}
子弹
class Bullet : Entity
{
public new void Update(GameTime gameTime, GraphicsDevice gd, Player p, Tilemap tm, EntityManager em)
{
}
public new void Render(SpriteBatch spriteBatch)
{
}
}
实体经理
class EntityManager
{
public List<Entity> entityList = new List<Entity>();
public void Update(GameTime gameTime, GraphicsDevice graphics, Player p, Tilemap tm, EntityManager em)
{
int i = 0;
while (i < entityList.Count)
{
entityList[i].Update(gameTime, graphics, p, tm, em);
i++;
}
}
public void Render(SpriteBatch sb)
{
foreach (Bullet entity in entityList)
{
entity.Draw(sb);
}
}
}
答案 0 :(得分:2)
更改Entity
方法以使用virtual
关键字:
public virtual void Update(...
public virtual void Draw(...
在您的子课程中,您希望 覆盖 基类&#39;使用override
关键字的方法,而不是new
关键字:
public override void Update(...
public override void Draw(...
通过在继承树中使用virtual/override
组合,您将启用多态,这将允许子类&#39;即使从List<Entity>
执行此操作也会被调用的方法。
链接到polymorphism in C#上的更多信息。