WP XNA 2: Ustawienia (Settings)

Ten wpis jest częścią cyklu o moich przygodach w tworzeniu gier XNA dla Windows Phone.

Ustawienia gry takie jak:

  • Efekty dźwiękowe on/off
  • Poziom głośności muzyki
  • Wibracja on/off
  • Wybrany język

to coś co każda (a jeśli nie to większość) gier powinna posiadać. Ustawienia mają charakter globalny dla aplikacji więc powinno się do nich łatwo dobierać i dobrze jeśli będą się same zapisywać po zmianach.

W tym celu tworzę statyczną klasę Settings ze statycznymi właściwościami, które odpowiadają kolejno za dźwięk, wibrację itd. Aby właściwości mogły być automatycznie zapisywane na stałe, posługuję się klasą, którą pokazałem w poprzednim wpisie o IsolatedStorageSettingsProvider.

public static class Settings
{
	public static class Sound
	{
		public static bool Enabled
		{
			get { return IsolatedStorageSettingsProvider.GetValueOrDefault("SettingsSoundEnabled", true); }
			set { IsolatedStorageSettingsProvider.SetValue("SettingsSoundEnabled", value); }
		}

		public static float Volume
		{
			get { return IsolatedStorageSettingsProvider.GetValueOrDefault("SettingsSoundVolume", 0.5f); }
			set { IsolatedStorageSettingsProvider.SetValue("SettingsSoundVolume", value); }
		}
	}

	public static class Music
	{
		public static bool Enabled
		{
			get { return IsolatedStorageSettingsProvider.GetValueOrDefault("SettingsMusicEnabled", true); }
			set { IsolatedStorageSettingsProvider.SetValue("SettingsMusicEnabled", value); }
		}

		public static float Volume
		{
			get { return IsolatedStorageSettingsProvider.GetValueOrDefault("SettingsMusicVolume", 0.5f); }
			set { IsolatedStorageSettingsProvider.SetValue("SettingsMusicVolume", value); }
		}
	}

	public static bool VibrationEnabled
	{
		get { return IsolatedStorageSettingsProvider.GetValueOrDefault("SettingsVibration", true); }
		set { IsolatedStorageSettingsProvider.SetValue("SettingsVibration", value); }
	}

	public static Language Language
	{
		get { return IsolatedStorageSettingsProvider.GetValueOrDefault("SettingsLanguage", Language.English); }
		set { IsolatedStorageSettingsProvider.SetValue("SettingsLanguage", value); }
	}

	public static bool ToolTipsEnabled
	{
		get { return IsolatedStorageSettingsProvider.GetValueOrDefault("SettingsToolTipsEnabled", true); }
		set { IsolatedStorageSettingsProvider.SetValue("SettingsToolTipsEnabled", value); }
	}
}

Zalety

  • Czytelne i łatwe w użyciu.
  • Automatyczne zapisywanie i odczyt z IsolatedStorageSettings.
  • W przypadku większej ilości ustawień warto zagnieżdżać klasy i grupować ustawienia – a dalej będzie łatwo i czytelnie.
  • W razie braku wpisu w IsolatedStorageSettings można podać wartość domyslną.

Wady

  • Każda zmiana właściwości powoduje zapis do IsolatedStorageSettigs.

Uwagi

  • Właściwości można pozostawić jako zwykłe, gołe get i set, a utworzyć dodatkowe metody SaveSettings() oraz LoadSettings(), a następnie wywoływać je np. w App.xaml.cs w metodach Launching, Deactivated, Activated oraz Closing.

Zachęcam do komentowania. Wszelkie uwagi, pytania, wasze rozwiązania czy znalezione u mnie błędy bardzo mile widziane 🙂

Advertisements