最近、XNA (Java 由来) の使用を開始し、ゲーム画面の表示で問題が発生しました。XNA をロードすると、game.cs クラスが与えられます。これは、ゲーム内の単一の自己完結型画面を描画するための関数のセットであると解釈しました。すべての異なる画面のコードをこの 1 つのクラスに入力すると、明らかに非常に面倒になるので、変更を処理するために以下のクラスを作成しました。
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クラスでメソッドが呼び出されるゲームのような画面について、代わりにマネージャーにする必要がありますか?
すなわち
たとえば、game.cs update メソッドでは次のようになります。
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);
}
したがって、基本的に、メインのゲーム クラスが再度実行されることはなく、表示内容が変更されるだけです。これは正しい解決策でしょうか?(ゲームクラスの多くが隠されているため、正しい使用方法がわかりません)