2014-07-13 50 views
2

我有一個選項難度,分辨率,全屏等事情的屏幕,但我努力尋找在遊戲時間存儲/獲取這些變量的最佳方式。存儲整個遊戲範圍的變量的最佳方法

我現在決定這樣做的方法是創建一個包含所有GameOption枚舉的'Constants'類。但是,如何爲所有這些選項選擇默認值,以及如何獲取當前選定的枚舉?

特別是與分辨率 - 我決定存儲的值,但不確定如何獲得默認或當前存儲的值?

namespace V1.test.RPG 
{ 
    public class GameOptions 
    { 
     public enum Difficulty 
     { 
      EASY, 
      MEDIUM, 
      HARD 
     } 

     public enum Sound 
     { 
      ON, 
      QUIET, 
      OFF 
     } 

     public enum Music 
     { 
      ON, 
      QUIET, 
      OFF 
     } 

     public enum ResolutionWidth 
     { 
      SMALL = 1280, 
      MEDIUM = 1366, 
      LARGE = 1920, 
      WIDESCREEN = 2560 
     } 

     public enum ResolutionHeight 
     { 
      SMALL = 800, 
      MEDIUM = 768, 
      LARGE = 1080, 
      WIDESCREEN = 1080 
     } 

     public Boolean fullScreen = false; 
    } 
} 

任何方向將是巨大的, 謝謝:)

+1

您可能想要創建一個GameOptions類的實例,該實例包含每個選項Enum的實例。你可以有一個沒有參數的構造函數,你可以自動將它們設置爲它們的「默認」值。 – Wilson

+1

現在有一個[gamedev StackExchange站點](http://gamedev.stackexchange.com/)。你可能會想問那裏。 –

+0

@ChrisHayes謝謝你,我問過那裏的問題,http://gamedev.stackexchange.com/questions/80210/best-way-to-store-game-wide-variables –

回答

7

該枚舉類似於類本身,它們不是變量。這是設置佈局的更好方法。

namespace V1.test.RPG 
{ 
    public class GameOptions 
    { 
     public GameOptions() 
     { 
      FullScreen = false; 
      DifficultyLevel = Difficulty.Normal; 
      SoundSetting = Sound.On; 
      // And so on. 
     } 

     public Boolean FullScreen { get; set; } 
     public Difficulty DifficultyLevel { get; set; } 
     public Sound SoundSetting { get; set; } 
     //And so on... 
    } 

    public enum Difficulty 
    { 
     EASY, 
     MEDIUM, 
     HARD 
    } 

    public enum Sound 
    { 
     ON, 
     QUIET, 
     OFF 
    } 

    public enum Music 
    { 
     ON, 
     QUIET, 
     OFF 
    } 

    public enum ResolutionWidth 
    { 
     SMALL = 1280, 
     MEDIUM = 1366, 
     LARGE = 1920, 
     WIDESCREEN = 2560 
    } 

    public enum ResolutionHeight 
    { 
     SMALL = 800, 
     MEDIUM = 768, 
     LARGE = 1080, 
     WIDESCREEN = 1080 
    } 

} 

您現在可以設置所有默認值在GameOptions類的構造函數,你再只是通過您的變量的副本身邊需要讀取選項中的類,它只是讀取它需要的設置。

public class GameEngine 
{ 
    private readonly GameOptions _options; 
    public GameEngine() 
    { 
     _options = new GameOptions();  
    } 

    public void ShowSetupScreen() 
    { 
     //If the setup screen modifies the values inside the _gameOptions variable 
     // by passing the variable in it removes the need for "Global variables" 
     using(var setupScreen = new SetupScreen(_gameOptions); 
     { 
      setupScreen.Show(); 
     } 
    } 

    public void Enemy CreateEnemy() 
    { 
     //Creates a new enemy and passes the options in so it can read the settings 
     // like the difficulty level. 
     return new Enemy(_gameOptions); 
    } 

    //And so on. 

使用,而不是一個靜態全局變量它使人們更方便保存和使用像XmlSerializer所以用戶設置會被記住,它們將關閉遊戲後加載設置一個實例變量。

+0

謝謝! 我應該然後將resolutionWidth和Height存儲爲int的嗎? public int resolutionWidth {get;組; } public int resolutionHeight {get;組; } 並從枚舉中獲取值? resolutionWidth =(int)ResolutionWidth.WIDESCREEN; resolutionHeight =(int)ResolutionHeight.WIDESCREEN; –

+0

^這是非常可怕的格式。抱歉。我試圖更好地格式化它無濟於事:/ –

+0

老實說,我會將決議存儲爲自己的類,而不是作爲枚舉。 'public class Resolution {public int Width {get;設置;} public int Height {get;組; }' –

1

我使用IsolatedStorageSettings保存的AppSettings:

IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; 

//set value 
settings.Add("Difficulty", "EASY"); 

//get value 
object difficulty = settings["Difficulty"]; 

確保您可以使用您的枚舉拿到鑰匙: Difficulty.EASY.ToString()

相關問題