最近开始使用 XNA(来自 java)并遇到了显示游戏屏幕的问题。加载 XNA 时,我得到一个 game.cs 类,我将其解释为一组用于在游戏中绘制单个独立屏幕的函数。显然,将所有不同屏幕的代码输入到这个单一的类中会很快变得非常混乱,所以我创建了下面的类来处理更改:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace Colonies
{
public class GameManager //manages game screens
{
Microsoft.Xna.Framework.Game currentScreen;
public enum screens { menu, game, summary };
public GameManager()
{
initialize();
}
public void initialize()
{
currentScreen = new Menu(this);
((Menu)currentScreen).Run();
}
public void changeScreen(int i)
{
switch (i)
{
case 0:
currentScreen = new Menu(this);
((Menu)currentScreen).Run();
break;
case 1:
currentScreen = new World(this);
((World)currentScreen).Run();
break;
case 2:
currentScreen = new Summary(this);
((Summary)currentScreen).Run();
break;
}
}
}
}
但是,当其中一项更改被触发时,这会导致一个错误标志告诉我我不能多次调用游戏运行。这是否意味着最初估计只有一个通用游戏屏幕实际上是正确的?!是否应该为经理查询类似屏幕的游戏,然后在主 game.cs 类中调用哪些方法?
IE
在 game.cs 更新方法中例如:
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// TODO: Add your update logic here
aGameManager.getAGameObject.DoAnUpdate();
base.Update(gameTime);
}
所以基本上我的主要游戏类永远不会再次运行,而只是改变它显示的内容。这会是正确的解决方案吗?(这么多游戏类是隐藏的,我不确定使用它的正确方法是什么)