Pierwszy projekt MonoGame dla Windows 8

MonoGameWiemy już czym jest MonoGame i jak je zainstalować więc czas na utworzenie pierwszego projektu.

Ten post jest częścią serii poświęconej tworzeniu i portowaniu gier dla Windows Store w technologii XNA (MonoGame).

Zobacz też

Szablony projektów MonoGame w Visual Studio 2010

Jeśli masz Visual Studio 2010 (a fajnie by było gdybyś takie posiadał na swoim komputerze, bo przyda się później) i podczas instalacji MonoGame zaznaczyłeś opcję szablonów dla VS2010 to od tego momentu możesz tworzyć (portować) swoje gdy XNA na takie platformy jak Android czy Linux. Jak to wygląda, jakie mamy możliwości? Nie wiem, bo jeszcze nie zagłębiałem się w konkurencję. Na razie focusuje się na Microsoft’owych platformach.

Projekty te są dostępne tylko w języku C#, co zapewne zasmuci dziadków piszących w VB.NET. Możliwe, że da się to jakoś obejść. Możliwe, że instalator nie instaluje wszystkich szablonów. Nie wiem, nie sprawdzałem, nie znam się, zarobiony jestem… mnie C# wystarczy do szczęścia.

Poniższy screen przedstawia listę szablonów projektów MonoGame dla Visual Studio 2010:

MonoGame projects for Visual Studio 2010

Szablony projektów MonoGame w Visual Studio 2012

Podobnie jak w VS 2010, szablony projektów MonoGame są dostępne jedynie dla języka C# i co ciekawe, są tutaj tylko dwa szablony – oba przeznaczone dla Windows Store apps.

MonoGame projects for Visual Studio 2012

Opis szablonów:

  • MonoGame Game – to szablon dla „czystego” XNA.
  • MonoGameGame (XAML) – jest to szablon analogiczny do szablonu Windows Phone 7 (XNA  + Silverlight). Tutaj możesz na jednej stronie wyświetlać zarówno elementy swojej gry w XNA, a nad nimi znajduje się warstwa z kontrolkami XAML. Poniższy screen przedstawia przykład takiej aplikacji (balon i tło w XNA, przyciski, slider i napisy w XAML):

MonoGame (XNA + XAML)

Oba szablony są do siebie bardzo podobne. Różnicę stanowi 1 plik GamePage.xaml, w którym umieszczasz kontrolki XAML.

Projekty MonoGame wyraźnie bazują na ShaprDX co widać w referencjach:

MonoGame - referencje (SharpDX)

Dla nas najciekawszym plikiem całego projektu jest Game1.cs. Tutaj znajduje się serce naszej przyszłej gry. Klasa Game1 dziedziczy po Microsoft.Xna.Framework.Game. Tutaj gratulację dla autorów MonoGame, którzy zadbali o wierną replikę przestrzeni nazw, nazw klas i ich zawartości, które znamy z oryginalnego XNA.

W głównej klasie znajdziemy użyteczne elementy jak GraphicsDeviceManager oraz SpriteBatch:

GraphicsDeviceManager _graphics;
SpriteBatch _spriteBatch;

Dalej mamy metody LoadContent() i UnloadContent(), gdzie odpowiednio wczytujemy lub zwalniamy assety (tekstury, dźwięki czy muzykę):

protected override void LoadContent()
{
    // Create a new SpriteBatch, which can be used to draw textures.
    _spriteBatch = new SpriteBatch(GraphicsDevice);

    // TODO: use this.Content to load your game content here
}

Tutaj znajdziesz główną pętlę gry – czyli metody Update() oraz Draw():

protected override void Update(GameTime gameTime)
{
	// TODO: Add your update logic here

	base.Update(gameTime);
}

protected override void Draw(GameTime gameTime)
{
	GraphicsDevice.Clear(Color.CornflowerBlue);

	// TODO: Add your drawing code here

	base.Draw(gameTime);
}

Wygląda znajomo co ?

Czegoś mi tu brakuje…

Skoro wszystko jest na swoim miejscu to wczytajmy jakąś teksturę i w Draw() wyświetlmy ją na ekranie. Cóż… okazuje się, że w MonoGame brakuje pewnego kawałka… nie ma projektu XNA Content Pipeline. Ups! Hm.. skoro nie ma, to jak przygotować assety, jak je później ładować do mojej gry!?

Spokojnie. XNA Content Pipeline nie ma w MonoGame (jeszcze), ale nie ma problemu aby użyć Content, z XNA Game Studio! Jeśli masz już skompilowaną grę XNA w Visual Studio 2010 to możesz użyć wygenerowanych plików *.XNB w MonoGame. Jak? O tym w następnym wpisie