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

本文关键字:继承 方法 调用 管理 实体 | 更新日期: 2023-09-27 18:03:20

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

公共类Bullet: Entity

公共类Npc: Entity

公共类Tank: Entity

公共类实体

一个实体有一些简单的功能: Update(),使()

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

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

然后循环遍历它们并调用Update()/Render()

但是存储的子弹 npc 将不会被其Update或Render函数调用。

TL;博士

我如何用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)
    {
    }
}
<<p> 实体管理器/strong>
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(...

并且在您的子类中,您希望通过使用override关键字重写基类的方法,而不是new关键字:

public override void Update(...
public override void Draw(...

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