实体管理,具有继承方法调用
Entity management, with inheritance method calls
所以,我正在创建一个带有实体系统的游戏。
public class 项目符号:实体
public class Npc:实体
public class 坦克:实体
public class实体
一个实体只有一些功能:
更新()、渲染()
我创建了一个这样的列表:
List<Entity> entities = new List<Entity>();
然后我循环遍历所有这些并调用 Update() / Render()
但是存储的 Bullets 或 Npcs 将不会调用它们的 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# 的更多信息。
所以,我正在创建一个带有实体系统的游戏。
public class 项目符号:实体
public class Npc:实体
public class 坦克:实体
public class实体
一个实体只有一些功能: 更新()、渲染()
我创建了一个这样的列表:
List<Entity> entities = new List<Entity>();
然后我循环遍历所有这些并调用 Update() / Render()
但是存储的 Bullets 或 Npcs 将不会调用它们的 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# 的更多信息。