你是如何制作的,以便游戏可以退出但是没有主类中的代码,将它放在不同的类中?
答案 0 :(得分:5)
您还可以使用一种单例模式,在主游戏类中,您可以定义该类类型的静态变量。当您构造或初始化该类时,您可以将该变量设置为this
,从而允许您在任何地方都可以轻松访问该类的实例。
public class Game1 : Microsoft.Xna.Framework.Game
{
public static Game1 self;
public Game1()
{
self = this;
//... other setup stuff ...
}
//... other code ...
}
然后,当你想从代码中的任何地方调用这个类中的方法时,你只需要这样做:
Game1.self.Exit(); //Replace Exit with any method
这可行,因为通常只应存在一个Game
类。当然,如果你以某种方式拥有多个Game
类,这种方法也不会有效。
答案 1 :(得分:4)
您可以创建一个方法:
//Inside of game1.cs
public void Quit()
{
this.Exit()
}
我假设您要在菜单组件上退出游戏,在这种情况下,您需要将game1的实例传递给组件,或者将其作为菜单组件更新方法中的参数添加。
public void Update(GameTime gameTime, Game1 game)
{
if(key is pressed)
{
game.Quit();
}
}
我不确定是否还有其他方法......或许找到一种方法来“强制”按下关闭按钮。
为了发送game1.cs的实例:
//in game1.cs
//in your update method
public void Update(GameTime gameTime)
{
//sends the current game instance to the other classes update method, where
// quit might be called.
otherClass.Update(gameTime, this);
//where 'this' is the actual keyword 'this'. It should be left as 'this'
}
答案 2 :(得分:3)
在您的主游戏类(默认为Game1
)中使用全局变量:
public static Boolean exitgame = false;
在Game1更新例程中:
protected override void Update(GameTime gameTime)
{
SomeOtherClass.Update(gameTime);
if (exitgame) this.Exit();
base.Update(gameTime);
}
答案 3 :(得分:1)
你可以告诉XNA引擎立即关闭:
Game.Exit();
这将立即退出游戏。请注意,我说Game.Exit()
- 游戏应该是你的游戏实例。如果您在实现Game
的类中编码,则可以执行以下操作:
Exit()