在主游戏类中定义枚举时,如何使用XNA中的其他类可以访问枚举?

时间:2011-01-18 18:08:24

标签: class enums xna accessible

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

3 个答案:

答案 0 :(得分:3)

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

  1. 通过全局变量或单例使全局可访问游戏状态。
  2. 将游戏状态供应商对象传递给需要了解游戏状态的对象。
  3. 我更喜欢选项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;
          }
       }
    }
    

    但是,如果可能的话,应该避免将游戏状态暴露给游戏以外的对象。它打破了游戏的封装,并将对象紧密地结合在一起。对象是否真的需要了解您的游戏状态,还是需要知道更具体的操作?你有两个独立的对象,一个对应于游戏类控制的每个游戏状态吗?

答案 1 :(得分:0)

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

using MyGame.ThisIsMyNameSpace;

暴露枚举,以便您可以在不必完全限定的情况下引用它

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

答案 2 :(得分:0)

public class GameClass
{
    public static GameState State;
}

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

来访问它