MonoGame Wieloplatformowe gry w C# Mateusz Cicheński
Plan prezentacji Założenia Alternatywy Narzędzia Różnice między WP8, ios, Android DEMO Podsumowanie
Założenia CEL: Stworzenie wieloplatformowej gry w C# Prosta gra mobilna Grafika 2D
Alternatywy I wiele innych
Narzędzia
Adobe Illustrator Alternatywnie dowolny inny program do tworzenia grafiki
MonoGame Open source Implementacja XNA 4.x Dostępne skompilowane biblioteki na większość platform
Visual Studio 2013 Dostępne w ramach MSDN lub DreamSpark Możliwość korzystania z dodatkowych narzędzi, np. ReSharper Integracja z TFS (oczywiście są też wtyczki dla SVN i GIT ) Darmowy hosting TFS/GIT na visualstudio.com
Xamarin Studio IDE dostarczane przez Xamarin W pełni zgodne z projektami utworzonymi w Visual Studio Dostępne z każdą licencją Xamarin (w tym darmową STARTER)
Xcode 6 Darmowe narzędzie od Apple Używane tylko po to, żeby opublikować aplikację w sklepie Apple
Narzędzia potencjalne koszty WINDOWS PHONE ANDROID ios Xamarin.Android licencja $99 (edu) Business $999 Komputer od Apple Mac Mini $599 Mac Air $999 Xamarin.iOS licencja $99 (edu) Business $999
Developer account potencjalne koszty WINDOWS PHONE ANDROID ios DreamSpark/MSDN free Normalnie - 19 EUR Google Play - $25 App Store - $99 / year
Wspólny kod aplikacji Pipeline czcionki, tekstury, dźwięki Pipeline
Różnice między WP8, ios, Android Różne rozdzielczości urządzeń Cykl życia aplikacji dla ios, Windows Phone i Android jest zupełnie inny Brak niektórych bibliotek w projekcie wzorcowym MonoGame np. SharpDX.XAudio2.dll (zależy od wersji instalatora)
Różne rozdzielczości
Różne rozdzielczości *dane pochodzą z: www.iosres.com
Różne rozdzielczości 4:3 3:2 16:10 5:3 16:9
Różne rozdzielczości rozwiązanie Ustalenie rozdzielczości renderowania Skalowanie Letterboxing Zamiast czarnych pasków tło związane z grą
Cykl życia aplikacji
Cykl życia aplikacji
Cykl życia aplikacji
Cykl życia aplikacji
Cykl życia aplikacji rozwiązanie Windows Phone i ios są bardzo podobne, nie trafiłem na problemy Android aplikacja po przejściu w stan Background traci m.in. kontekst Open GL, co oznacza, że jeśli nie zrobimy czegoś dodatkowo, to trzeba będzie ponownie wczytać tekstury co z kolei wiąże się z ponownym oczekiwaniem na załadowanie się aplikacji trzeba samodzielnie oprogramować logikę ekranu ładowania ale MonoGame potrafi przywrócić tekstury, musimy tylko zapewnić aktualność referencji
github.com/hrkm/rpg_monogame [DEMO]
Układ projektów projekt XNA, wymaga VS2010 (ale można skorzystać z narzędzia Pipeline) Wszystkie pliki *.cs znajdują się w InfiniteSnake, pozostałe projekty je tylko linkują. (za wyjątkiem plików specyficznych dla platformy, np. Activity dla Androida)
Podpięcie gry Windows Phone 8 public GamePage() { InitializeComponent(); } _game = XamlGame<Game1>.Create("", this);
Podpięcie gry Windows Store App static void Main() { var factory = new MonoGame.Framework.GameFrameworkViewSource<Game1>(); Windows.ApplicationModel.Core.CoreApplication.Run(factory); }
Podpięcie gry Android protected override void OnCreate(Bundle bundle) { base.oncreate(bundle); Game.Activity = this; _game = new Game1(); SetContentView(_game.Window); _game.run(); }
Podpięcie gry ios public override bool FinishedLaunching(UIApplication app, NSDictionary options) { game = new Game1(); game.run(); } return true;
Efekt końcowy różne platformy w kodzie Lepiej stworzyć interfejs, który byłby implementowany per platforma. Alternatywnie klasę bazową nadpisywaną przez implementacje per platforma.
Efekt końcowy Windows Phone 8
Efekt końcowy Windows Store
Efekt końcowy ios
Efekt końcowy Wspólny kod dla wszystkich wersji Modyfikacje dla poszczególnych systemów dyrektywy preprocesora głównie sposób zapisywania danych w pamięci urządzenia na potrzeby ios dostosowana rozdzielczość i tekstury brak letterboxa Gra dostępna za darmo: Google Play (https://play.google.com/store/apps/details?id=com.mcichenski.infinitesnake) [2-3h] Windows Phone Store (http://www.windowsphone.com/s?appid=5d87cf2f-bb48-4076-8a07-6094b8a83a44) [5 dni] [8h] Windows Store (http://apps.microsoft.com/windows/app/infinite-snake/63a366d7-f76e-482d-aff1-bdfa3a4ebbd8) [5 dni] [8h] ios iphone, ipad (https://itunes.apple.com/tr/app/infinite-snake/id795354975) [10 dni][7 dni]
Podsumowanie Da się. Wiele komercyjnych produkcji powstało przy użyciu takiej kombinacji narzędzi (przynajmniej jeśli chodzi o stronę programistyczną) Bastion, Fez, Transistor, TowerFall: Ascension
Pytania? [mateusz.cichenski@cs.put.poznan.pl] bit.ly/oop2014