在我的XNA游戏中,我有一个从精灵列表(SpriteList)运行的foreach循环。此列表是其子类的混合。
在我的更新方法中,我正在使用:
foreach (Sprites s in SpriteList)
{
s.Update();
}
这是调用Sprites类的update方法(它是抽象的),但我希望它使用它所构成的子类的update方法。
我尝试将Sprites类的更新方法设为abstract和virtual,并且在调用方法时都创建了错误
修改
我的精灵课是:
public abstract class Sprites
{
public Texture2D SpriteTexture;
public Rectangle SpriteRectangle;
public SpriteTypes SpriteType;
public Color SpriteColour;
public bool SpriteAlive = false;
public Sprites(Texture2D TextureIn, Rectangle RectangleIn)
{
SpriteTexture = TextureIn;
SpriteRectangle = RectangleIn;
SpriteType = SpriteTypes.Sprite;
SpriteColour = Color.White;
}
public void Update()
{
// This is what's being called, rather than the update methods of the child classes
}
答案 0 :(得分:4)
您需要在virtual
类中创建方法Sprites
(如果该类中没有实现,则为abstract
)和使用{{ 1}}在每个子类中声明方法时的关键字。
答案 1 :(得分:0)
这就是你需要的:
public abstract class Sprites
{
public Texture2D SpriteTexture;
public Rectangle SpriteRectangle;
public SpriteTypes SpriteType;
public Color SpriteColour;
public bool SpriteAlive = false;
public Sprites(Texture2D TextureIn, Rectangle RectangleIn)
{
SpriteTexture = TextureIn;
SpriteRectangle = RectangleIn;
SpriteType = SpriteTypes.Sprite;
SpriteColour = Color.White;
}
// note the `abstract` keyword here,
// which means "this method is to be implemented in child classes"
public abstract void Update();
}
public class ChildSprites : Sprites
{
public override void Update()//note `override` keyword
{
// ...
}
}