1

所以我有我的主要游戏类,并为游戏状态创建了一个枚举。如何使其他类可以访问此枚举?我知道您必须将其公开,但我似乎无法让其他班级可以访问它。我想要做的是有一堆不同的类能够通过枚举检查当前的游戏状态,并根据当前的游戏状态做不同的事情。

4

3 回答 3

3

有两种主要方法可以做到这一点。

  1. 通过全局变量或单例使游戏状态可全局访问。
  2. 将游戏状态供应商对象传递给需要了解游戏状态的对象。

我更喜欢选项 2,因为它使您的依赖关系更加明确。

public enum GameState
{
   Running,
   Paused
}

public interface IGame
{
   GameState State { get; }
}

public class SomeObject
{
   private IGame m_game;

   public SomeObject(IGame game)
   {
      m_game = game;
   }

   public void Update()
   {
      switch (m_game.State)
      {
         case GameState.Running:
            UpdateRunning();
            break;

         case GameState.Paused:
            UpdatePaused();
            break;
      }
   }
}

public class Game : IGame
{
   GameState m_state;
   SomeObject m_object;

   public Game()
   {
      m_object = new SomeObject(this);
      m_state = GameState.Running;
   }

   public GameState State
   {
      get
      {
         return m_state;
      }
   }
}

但是,如果可能,应避免将游戏状态暴露给游戏以外的对象。它打破了游戏的封装性,并将您的对象紧密耦合在一起。对象真的需要知道你的游戏状态还是它们需要知道更具体的东西才能运行?你能有两个独立的对象,一个对应于由游戏类控制的每个游戏状态吗?

于 2011-01-19T03:13:04.757 回答
0

根据它所在的命名空间,您可能必须将以下行(或类似的行)放在您想要访问它的任何 .cs 文件的顶部:

using MyGame.ThisIsMyNameSpace;

这会暴露枚举,以便您可以引用它而无需完全限定它

或者,如果您的意思是您需要一种访问当前游戏状态的方法,那么您需要引用某些内容。许多人做的一件事是在Game类上创建一个公共属性,然后传递对该实例的引用。其他人只是创建一个单例或静态类来保存全局可用空间。这完全取决于您的代码风格和游戏的大小

于 2011-01-18T18:59:38.750 回答
0
public class GameClass
{
    public static GameState State;
}

这意味着无论您创建多少 GameClass 实例,都只会有一个 State 实例,但在这种情况下,这似乎是理想的行为。您可以使用 GameClass.State 而不是 gameClassInstance.State 来访问它

于 2011-02-20T23:40:42.283 回答