XNA Content Pipeline w MonoGame

MonoGamePierwszy project MonoGame dla Windows 8 (i nie tylko) gotowy. Ale poprzednio wspomniałem, że obecna wersja MonoGame nie obsługuje XNA Content Pipeline. W tym poście podam rozwiązanie (mam nadzieję, że tylko tymczasowe) tego problemu, bo Content i assety są nam baaaardzo potrzebne.

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

Zobacz też

XNA Content Pipeline

Jest to proces, który przetwarza różnego rodzaju assety (grafiki, dźwięki czy muzykę) na odpowiednie komponenty, z których później może korzystać aplikacja XNA.

Content Pipeline

Źródło: http://msdn.microsoft.com/en-us/library/bb447745.aspx

Dzięki temu programista może zupełnie zapomnieć o różnych typach obrazków, formatach audio itd. bo Content Pipeline wie co robić z większością typów plików. Na końcu procesu powstają pliki z rozszerzeniem *.XNB, które w runtime, gdy gra zostanie uruchomiona mogą zostać wczytane do aplikacji za pomocą metody Load<T>() klasy ContentManager:

private Texture2D playerTexture;

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
	playerTexture = Content.Load<Texture2D>("player");
}

XNA Content Pipeline w MonoGame

Poprzednio wspomniałem, że Content Pipeline nie jest obecne (jeszcze!) w MonoGame. Ale nic nie stoi na przeszkodzie aby ładować wcześniej przygotowane assety z plików *.XNB.

Oficjalne obejście polega na tym, aby za pomocą np. Visual Studio 2010 w projekcie XNA Game Studio 4 (lub innym projekcie XNA, może być nawet na Windows Phone 7), przygotować Content, a następnie go skompilować.

XNA Content Pipeline w Visual Studio 2010

Po skompilowaniu przejdź do katalogu gdzie zrobił się build. Najczęściej będzie to katalog Solucja -> Projekt -> Bin -> Debug (lub Release). W tym miejscu interesuje nas katalog Content. W nim znajdują się wszystkie skompilowane (przetworzone przez Content Pipeline) assety w postaci plików *.XNB. Możesz sprawdzić sam co jest w środku. Skopiuj katalog Content.

Skompilowane pliki *.XNB

Teraz odszukaj analogiczny katalog w solucji Visual Studio 2012 MonoGame z Twoją grą (jeśli nie masz takiego projektu to utwórz go wcześniej). Skompiluj projekt gry MonoGame i przejdź do katalogu (w solucji Visual Studio 2012, MonoGame) -> Bin -> Debug (lub Release) -> AppX -> i wklej tutaj wcześniej skopiowany katalog Content.

Teraz w runtime Twoja aplikacja będzie widziała, będzie miała dostęp do assetów!

Co dalej

Czekamy na kolejne wersje MonoGame. Przypominam, że na tą chwilę używam MonoGame 3.0, które jest w wersji Beta. W tej wersji w ogóle po raz pierwszy pojawiło się wsparcie dla aplikacji Windows Store. Póki co trzeba sobie radzić z przerzucaniem plików *.XNB miedzy projektami XNA Game Studio, a MonoGame.

8 thoughts on “XNA Content Pipeline w MonoGame

  1. Pingback: Instacja MonoGame dla Windows 8 | Wojciech Poniatowski [PL]

  2. Pingback: MonoGame na Windows 8 | Wojciech Poniatowski [PL]

  3. Pingback: Pierwszy projekt MonoGame dla Windows 8 | Wojciech Poniatowski [PL]

  4. Pingback: Wojciech Poniatowski [EN]

  5. Pingback: First project in MonoGame for Windows Store apps | Wojciech Poniatowski [EN]

  6. Pingback: Portowanie gier z XNA WP7 na Windows 8 MonoGame | Wojciech Poniatowski [PL]

  7. Pingback: dotnetomaniak.pl

  8. W pomocach xna pt. „winforms 2 example content loading” bodajże.
    Masz jak załadować do xnb pliki wywołując tylko klasy Build Visual Studio. Cholerstwo na mojej maszynie jest strasznie wolne (strasznie wolno się pliki przetwarzają) dlatego na potrzeby edytora to rozwiązanie to i tak za mało.
    I jeszcze jedno… by to odpalić(przetwarzanie do .xnb), trzeba na maszynce mieć xna w wersji developerskiej poinstalowane. I oczywiście samemu jakiś algorytm dobierania plików do przetworzenia zapodać.

Możliwość komentowania jest wyłączona.