Projektowanie poziomów w grze za pomocą XNA?

10

Zastanawiam się nad projektowaniem poziomów w grze. Moja obecna sytuacja obraca się wokół Kafelków - mam wiele różnych warstw z różnymi typami obiektów (dla każdego, kto nie jest zaznajomiony z Kafelkami, obiekt jest niczym więcej niż współrzędną z przypisanymi mu dowolnymi właściwościami).

Obecnie kompiluję grę za każdym razem, gdy wprowadzam niewielką zmianę w pliku mapy, aby sprawdzić, czy wszystko jest właściwie ustawione. Czy jest sposób, abym automatycznie wczytywał poziom gry po wykryciu zmiany pliku mapy? Czy XNA nawet na to pozwala, czy też sposób, w jaki działa potok treści, nie pozwala na dynamiczną treść w taki sposób? Wszelkie wskazówki i sugestie są absolutnie mile widziane.

Christopher Horenstein
źródło

Odpowiedzi:

8

Zakładam, że pliki map są przetwarzane przez potok treści, a następnie ładowane w czasie wykonywania za pomocą Content.Load. Masz dwie opcje:

  • Zapisz swoje mapy jako plik XML za pośrednictwem IntermediateSerializer.Serialize. Następnie w czasie wykonywania możesz je odczytać za pomocą IntermediateSerializer.Deserialize, aby zobaczyć zmiany.
  • Jest to trudniejsze: wywołanie MSBuild w czasie wykonywania w celu ponownej kompilacji plików do odpowiednich XNB i ponowne załadowanie ich za pomocą ContentManager. Ta próbka to robi.
r2d2rigo
źródło
Pomiędzy nimi jestem pewien, że będę w stanie coś rozwiązać. Dziękuję Ci!
Christopher Horenstein
2

Możesz także użyć Karvonite, jeśli chcesz szybko zacząć działać.

Jest to zwinny system utrzymywania. Nie jestem pewien, czy nowa wersja będzie działać na Windows Phone 7 lub Xbox.

Utworzyłbyś definicję trwałości za pomocą ich edytora trwałości (to całkiem proste, wystarczy zaimportować zestaw i sprawdzić pola / właściwości klas / struktur, które chcesz utrwalić). Inicjujesz ObjectSpace w kodzie i dodajesz / usuwasz / pobiera z niego obiekty . (te obiekty są utrwalone)

Jeśli potrafisz stworzyć abstrakcję, aby silnik kafelkowy lub jakkolwiek go nazwiesz, nie obchodzi dokładnie, w jaki sposób otrzyma mapę, tylko otrzyma tę, o którą prosi. Następnie możesz wrócić i użyć XmlSerializer lub Intermediate. (w zależności od tego, co wolisz) Wszystko, co musisz zrobić, aby zaimplementować te inne serializatory, to utworzyć kolejną implementację abstrakcji (interfejs lub klasa abstrakcyjna).

Myślę, że na stronie klubu twórcy XNA istnieje przykład, jak budować zawartość w czasie wykonywania. Jednak może nie być zbudowany z najnowszymi ramami. W ten sposób możesz zachować swój stary kod, jeśli już korzystasz z potoku treści. Oto link: Winform Series 2: Ładowanie treści

Michael Coleman
źródło
Czuję się trochę głupio, pytając o to, ale czy możesz opisać, jak wyobrażasz sobie przepływ pracy za pomocą tego środowiska? Brzmi naprawdę fajnie, ale nie jestem pewien, jak do tego podejść.
Christopher Horenstein
1
Cóż, definiujesz serializację w ich edytorze trwałości. (to naprawdę proste, wystarczy zaimportować zestaw obiektów i zaznaczyć niektóre pola na strukturach / klasach i polach / właściwościach, które mają zostać zachowane). Po wykonaniu tej czynności można po prostu zainicjować przestrzeń obiektów, która będzie serializować / deserializować obiekty . Uruchomienie i uruchomienie jest dość schludne i szybkie.
Michael Coleman
1
Możesz także obejrzeć ten projekt na codeplex, aby uzyskać lepszy przykład tworzenia treści poza studiem wizualnym. ( xnadevru.codeplex.com/… )
Michael Coleman