首先,我将声明我使用的单例实际上不会在整个应用程序生命周期中出现。它更像是一种封装用户正在发生的事情的方式。
我有几个 GameState,例如 InGame 或 MainMenu,它们有一些非常相似的函数调用,所以我想使用继承来停止复制/粘贴。以下代码是我所拥有的,但它不能按我的意愿工作。这里是:
BaseState.cs
abstract class BaseState
{
protected static BaseState mHandle = null;
protected static BaseState Handle
{
get
{
return mHandle;
}
set
{
mHandle = value;
}
}
public static GameState UpdateState(GameTime gameTime)
{
GameState g = GameState.MainMenu;
try
{
Handle.Update(gameTime);
}
catch (Exception e)
{
}
return g;
}
public static void DrawState(GameTime gameTime, SpriteBatch spriteBatch)
{
Handle.Draw(gameTime, spriteBatch);
}
public static void Release()
{
mHandle = null;
}
protected abstract GameState Update(GameTime gameTime);
protected abstract void Draw(GameTime gameTime, SpriteBatch spriteBatch);
}
InGame.cs
class InGame : BaseState
{
private InGame()
{
}
protected static new BaseState Handle
{
get
{
if (mHandle == null)
{
mHandle = new InGame();
}
return mHandle;
}
set
{
mHandle = value;
}
}
protected override GameState Update(GameTime gameTime)
{
return GameState.Quit;
}
protected override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
}
}
您可能会说我希望能够在其中使用and get
ofset
所以我可以简单地调用 Handle.Update() 并且无论我是从 InGame 还是 Menu 或任何它知道要使用哪个代码的地方调用它。InGame
BaseState
显然,我需要提高我的 OO 技能。但是,如果有人能提出一种方法来让它做我想做的事情,或者提出一种不同的方法,我将不胜感激。谢谢。