实体管理,具有继承方法调用
本文关键字:继承 方法 调用 管理 实体 | 更新日期: 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>
进行调用。