实体管理,具有继承方法调用

Entity management, with inheritance method calls

所以,我正在创建一个带有实体系统的游戏。

public class 项目符号:实体

public class Npc:实体

public class 坦克:实体

public class实体

一个实体只有一些功能: 更新()、渲染()

我创建了一个这样的列表:

List<Entity> entities = new List<Entity>();

然后我循环遍历所有这些并调用 Update() / Render()

但是存储的 BulletsNpcs 将不会调用它们的 Update 或 Render 函数。

TL;DR

如何使用 Update/Render 函数存储不同的 classes 并在循环中为所有这些函数调用它。

实体

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);
        }
    }

}

更改 Entity 的方法以使用 virtual 关键字:

public virtual void Update(...

public virtual void Draw(...

并且在您的 child class 中,您想要 覆盖 基础 class' 方法使用 override 关键字,而不是 new 关键字:

public override void Update(...

public override void Draw(...

通过在继承树中使用 virtual/override 组合,您启用了多态性,这将允许调用 child classes 的方法,即使是从List<Entity>.

Link 了解有关 polymorphism in C# 的更多信息。