Podstawy XNA - Zarządzanie zasobami  Udostępnij na: Facebook

Autor: Tadeusz Makuch

Opublikowano: 2012-03-22

W trakcie tworzenia aplikacji jednym z pierwszych kroków, jakie musimy wykonać jest dodanie zasobów, czyli m.in. tekstur czy plików dźwiękowych. Z tego samouczka dowiesz się, jak dodać je do projektu. Poznasz także prosty sposób ich użycia.

Przed wykonaniem zadań powinieneś:

Po wykonaniu zadań nauczysz się:

  • dodawać zasoby do projektu,
  • umieszczać zasoby w aplikacji.

Implementacja

Twoim zadaniem będzie utworzenie prostej aplikacji, która wyświetli obraz na ekranie oraz odtworzy muzykę w tle. Wynik zadań został przedstawiony na Rys. 1.

Rys. 1. Wynik dodania i wyświetlenia zasobów w aplikacji XNA.

W celu wyświetlenia obrazu na ekranie i odtworzenia muzyki w tle musimy wykonać następujące kroki:

  • dodać plik graficzny i dźwiękowy do projektu Content,
  • dodać dwa pola do klasy, w której będziemy je wykorzystywali,
  • załadować kontent w metodzie LoadContent(), a wynik przypisać do zdefiniowanych pól,
  • odtworzyć muzykę w metodzie LoadContent(),
  • wyświetlić obrazek w metodzie Draw().

Przygotuj zasoby

Przygotuj pliki zawierające obraz i dźwięk, które chciałbyś dodać do projektu. Nasza aplikacja będzie wyświetlana w oknie o szerokości 800 pikseli i wysokości 480 pikseli. Obraz o innej rozdzielczości zostanie rozciągnięty do wymiarów tego okna. Jeśli nie masz własnych zasobów, możesz skorzystać z przykładowych obrazów i muzyki, znajdujących się odpowiednio w folderach: "C:\Użytkownicy\Publiczny\Obrazy publiczne\Przykładowe Obrazy" i "C:\Użytkownicy\Publiczny\Muzyka publiczna\Przykładowa  Muzyka". Na potrzeby tego artykułu, nazwij te pliki odpowiednio "obraz" i "muzyka", nie zmieniając ich rozszerzeń.

Informacja
Wybierając pliki do pracy z XNA, pamiętaj o dozwolonych rozszerzeniach dla muzyki (.xap, .wav, .wma, .mp3) i obrazu (.bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, .tga.).

Dodawanie zasobów do aplikacji

Pierwszym krokiem jest dodanie zasobów do aplikacji w odpowiednim projekcie.

  1. Stwórz nowy projekt i nazwij go "XNAZasoby". W tym celu:
  • uruchom Visual Studio,
  • wybierz File -> New -> Project,
  • z kategorii XNA Game Studio 4.0 wybierz projekt Windows Game (4.0),
  • w polu Name wpisz XNAZasoby (Rys. 2.).

Rys. 2. Dodawanie nowego projektu XNA.

  1. Dodaj do projektu pliki zawierające obraz i muzykę:
  • w oknie Solution Explorer naciśnij prawym przyciskiem myszy na "XNAZasobyContent (Content)" (Rys. 3.),
  • wybierz Add -> Existing Item,
  • wybierz pliki i naciśnij przycisk Add.

Rys. 3. Widok okna Solution Explorer z projektem w XNA.

Informacja

Jak można zobaczyć na Rys. 2., po utworzeniu aplikacji powstały dwa projekty - "XNAZasoby" oraz "XNAZasobyContent (Content)". Zasoby zawsze dodajemy do drugiego projektu. Możemy to uczynić na dwa sposoby:

  • dodawanie przez „przeciągnij i upuść” - zaznacz i przeciągnij pliki, które chcesz dodać do projektu, a następnie upuść je na nazwie drugiego projektu,
  • dodawanie przez menu „rozwijane” - naciśnij prawym przyciskiem myszy na "XNAZasobyContent (Content)", a następnie wybierz Add ‑> Existing Item. W nowym oknie wybierz pliki, które chcesz dodać do projektu i naciśnij Add.

Załaduj zasoby do aplikacji

Po dodaniu zasobów musimy je pobrać do aplikacji i przechować je za pomocą odpowiednich obiektów w klasie, w której chcemy je wykorzystać.

  1. Dodaj dwa nowe pola do klasy Game1. Będą one przechowywały nasze zasoby w uruchomionej aplikacji:
  • otwórz plik Game1.cs.
  • w klasie Game1 poniżej linii SpriteBatch spriteBatch; dodaj:
//Tło - obraz oraz muzyka
Texture2D backgroundImage;
Song backgroundMusic;
  1. Pobierz zasoby do odpowiednich obiektów w celu ich późniejszego używania:
  • przejdź do metody LoadContent() i wpisz, po linijce // TODO, następujący kod:
// Ładowanie zasobów do pamięci 
backgroundImage = Content.Load<Texture2D>("obraz");
backgroundMusic = Content.Load<Song>("muzyka");
Informacja

W przypadku, gdy będziesz musiał, na jakimś etapie swoich przyszłych aplikacji, użyć ponownie metody Content.Load<>() w celu załadowania wcześniej używanego zasobu , otrzymasz referencje do już istniejącego elementu w pamięci .

XNA ułatwia także kwestię czyszczenie pamięci z prostych zasobów, korzystając z programowego zarządcy GarbageCollector. Funkcja UnloadContent() klasy Game1 służy do usuwania np. referencji zewnętrznych bibliotek, które nie są czyszczone przez GarbageCollector. Jeśli, z jakiegoś powodu, chcesz ręcznie czyścić pamięć, ważne jest, byś użył funkcji ContentManager.Unload(), a nie ContentManager.Dispose().

Odtwarzanie muzyki i wyświetlanie tła

Dodane zasoby są już gotowe do ich wyświetlenie/odtworzenia w aplikacji.

  1. Dodaj kod odtwarzania muzyki w pętli przy starcie aplikacji:
  • przejdź do metody LoadContent() i wpisz po poprzednio dodanym kodzie:
// Odtwarzanie muzyki przy starcie aplikacji
MediaPlayer.Play(backgroundMusic);
// Zapętlanie muzyki
MediaPlayer.IsRepeating = true;
  1. Dodaj kod wyświetlenia tła w prostokącie będącym oknem naszej aplikacji:
  • przejdź do metody Draw() i wpisz po linijce // TODO:
// Rozpoczynanie rysowania duszków w danej klatce
spriteBatch.Begin();
// Rysowanie tła
spriteBatch.Draw(backgroundImage, GraphicsDevice.Viewport.TitleSafeArea, Color.White);
// Zamykanie rysowania duszków w danej klatce
spriteBatch.End();
  1. Przetestuj działanie aplikacji:
  • zapisz zmiany w pliku,
  • wciśnij F5 lub wybierz Debug->Start Debugging,
  • sprawdź, czy Twoja aplikacja wyświetliła dodany obrazek oraz odtworzyła muzykę w tle.

Podsumowanie

W tym artykule nauczyliśmy się dodawać zasoby do naszego projektu i ładować je do pamięci. Przy okazji dowiedzieliśmy się jak, w prosty sposób, narysować tło oraz odtworzyć w tle muzykę. W celu tworzenia bardziej skomplikowanych aplikacji warto zapoznać się z bardziej zaawansowanymi sposobami wyświetlania obrazów i odtwarzania dźwięków.

W kolejnym artykule nauczymy się, jak wyświetlić obraz w XNA.

Zadanie

W celu sprawdzenia swoich umiejętności, spróbuj dodać do projektu więcej plików graficznych w różnych rozdzielczościach i sprawdź, jak zostaną zeskalowane. Spróbuj wyświetlić jednocześnie więcej niż jeden plik graficzny oraz odtworzyć jednocześnie kilka utworów muzycznych. Dodaj pliki w różnych formatach akceptowanych przez XNA.