Obecnie pracuję nad RPG, używając bazy startowej RPG od XNA jako podstawy. (http://xbox.create.msdn.com/en-US/education/catalog/sample/roleplaying_game) Pracuję z małym zespołem (dwóch projektantów i jeden wykonawca muzyki / dźwięku), ale jestem jedynym programista. Obecnie pracujemy z następującym (niezrównoważonym) systemem: zespół tworzy nowe zdjęcia / dźwięki, aby dodać je do gry, lub modyfikuje istniejące dźwięki / zdjęcia, a następnie przekazuje swoją pracę do repozytorium, w którym przechowujemy aktualną wersję wszystkiego. (Kod, obrazy, dźwięk itp.) Każdego dnia tworzę nowy instalator, odzwierciedlający nowe obrazy, zmiany kodu i dźwięk, i wszyscy go instalują.
Mój problem jest następujący: chcę stworzyć system, w którym reszta zespołu może na przykład zastąpić dźwięki walki i natychmiast zobaczyć zmiany, bez konieczności czekania, aż zbuduję. Sposób, w jaki XNA konfiguruje, jeśli opublikuję, koduje wszystkie pliki graficzne i dźwiękowe, więc zespół nie może „wymieniać”. Mogę skonfigurować Microsoft VS na wszystkich komputerach i pokazać im, jak szybko publikować, ale chciałem wiedzieć, czy istnieje prostszy sposób na zrobienie tego.
Czy ktoś wpadł na to podczas pracy z zespołami używającymi XNA?
Odpowiedzi:
Po pierwsze, nie sądzę, że musisz publikować i tworzyć instalator za każdym razem. Po prostu skompiluj projekt i umieść pliki wyjściowe (tj. Plik EXE i folder zawartości oraz wszelkie zależności DLL, których możesz użyć) w repozytorium, i powinien on również działać na ich komputerze, o ile mają one zainstalowany redystrybutor XNA.
Jeśli chodzi o twoje pytanie, mogę wymyślić dwa rozwiązania, z których jedno polega na zainstalowaniu programu Visual Studio na swoich komputerach, a drugie na wprowadzeniu pewnych zmian w grze:
Poproś ich o zainstalowanie programu Visual Studio i nauczenie, jak przekazywać zasoby przez potok treści XNA. Muszą tylko utworzyć projekt potoku treści, przeciągnąć tam pliki i skompilować. Następnie mogą zamienić wynikowe pliki XNB z plikami w folderze projektu i uruchomić plik EXE, aby zobaczyć zmiany.
Jeśli programujesz dla systemu Windows, możesz zmienić kod, aby ładował zasoby w czasie wykonywania w ich oryginalnych formatach, bez konieczności przechodzenia przez potok treści. Aby załadować obrazy, których możesz użyć
Texture2D.FromStream
(jak w tym przykładzie ), a dla dźwięku najlepszym rozwiązaniem, jakie znalazłem, było użycie zamiast tego interfejsu API FMOD (jak w tym przykładzie ). Następnie mogą po prostu zamienić zasoby bezpośrednio i uruchomić grę.Aby pójść jeszcze dalej, możesz również spróbować, aby twoja gra była jak najbardziej oparta na danych. Zasadniczo oznacza to, że wszystko, co powinieneś być w stanie łatwo zmienić, takie jak statystyki klas postaci lub ścieżka obrazów i plików dźwiękowych, których używasz, należy usunąć z kodu i umieścić w zewnętrznych plikach tekstowych (np. XML, JSON, INI). Następnie wystarczy edytować te pliki w edytorze tekstów, aby zobaczyć zmiany w grze, i nie trzeba ich odbudowywać.
źródło
Build->Configuration Manager
. Domyślnie kompilacja debugowania maDEBUG
zdefiniowany symbol kompilacji, co oznacza, że możesz owinąć swój kod nie wydany#if ( DEBUG ) doStuffIWouldntDoInRelease(); #elif theActualReleaseCode(); #endif
.svn update
w katalogu roboczym i byli na bieżąco.Trochę późno na imprezę, ale oto mój pomysł.
Wybrałbym trzecią możliwość, która nie wymaga niczego takiego jak modyfikowanie już istniejącej bazy kodu. Będzie to działać, jeśli zatwierdzisz (i skopiujesz) pliki binarne (rzeczywistą .exe gry i powiązane pliki DLL z kompilacji) gdzieś w katalogu wyjściowym - na przykład za pomocą skryptu po kompilacji. Dalej zakładam, że mówimy o Visual Studio 2010 i XNA Game Studio 4.0 (procedura jest bardzo podobna w przypadku innych wersji, wystarczy wymienić niektóre cyfry)
Tak więc pomysł jest taki: utwórz skrypt (.cmd) w katalogu głównym projektu, w którym znajduje się rozwiązanie .sln, wykonując następujące kroki:
Wywołaj „Wiersz polecenia programu Visual Studio 2010”:
Ma to na celu umożliwienie naszemu skryptowi odnalezienia bibliotek XNA oraz wszystkich wymaganych narzędzi i plików binarnych.
Wywołaj zadanie MSBuild w projekcie treści (.contentproj):
Możesz modyfikować właściwości przez określone różne platformy / profile. Możesz nawet posunąć się dalej, aby tworzyć treści dla większej liczby platform jednocześnie (Windows Phone, Xbox 360 lub Windows). Profil może być: Reach lub HiDef (http://msdn.microsoft.com/en-us/library/ff604995.aspx)
Skopiuj rekurencyjnie dane wyjściowe do folderu, w którym pliki binarne + aktualna gra jest przechowywana w repozytorium:
Szczegółowe informacje na temat flag, można powołać się w wierszu polecenia:
xcopy /?
. Ważne są:,/d
aby kopiować tylko zmodyfikowane pliki - w przypadku wielu zasobów przydatne jest, aby nie kopiować w kółko tych już istniejących i niezmodyfikowanych;/y
do automatycznego nadpisywania istniejących plików, aby można je było zaktualizować do nowszej wersji. Użyłem,xcopy
ponieważ normalniecopy
nie mogę kopiować folderów rekurencyjnych, o ile mi wiadomo - i prawdopodobnie porządkujesz zawartość folderów i podfolderów. Ponadto jest lepszy niż zwyklecopy
(wiele różnych flag).Zadzwoń,
pause
aby skrypt czekał na dane wejściowe użytkownika. Jest to przydatne, aby sprawdzić, czy kompilacja była poprawna i nie napotkano błędów.Teraz artyści (lub ktokolwiek), którzy modyfikują pliki zawartości, muszą tylko dwukrotnie kliknąć skrypt .cmd, a nowa treść zostanie zbudowana i skopiowana do katalogu wyjściowego, w którym znajdują się zatwierdzone artefakty, gotowa do przetestowania.
Istnieje jednak niewielki problem, do którego musisz wrócić do pierwszego punktu postu Davida: jeśli artyści chcą zmodyfikować projekt Treści poprzez dodanie / usunięcie / przeniesienie plików, muszą to zrobić, otwierając projekt w Visual Studio (lub ręcznie edytuj plik projektu, co, jak sądzę, nikt by nie zrobił). Jak powiedziałem, jest to niewielki problem, ponieważ mogą po prostu zatwierdzić nowe pliki w repozytorium, a Ty, koder, umieści je w Projekcie treści, gdy kod zostanie zrobiony, aby je obsłużyć.
Na ten temat Shawn Hargreaveas opublikował coś o msbuild i budowaniu projektów treści z wiersza poleceń: http://blogs.msdn.com/b/shawnhar/archive/2006/11/07/build-it-ahead-of-time .aspx Jego rozwiązaniem było utworzenie nowego pliku, ale myślę, że łatwiej i łatwiej jest go obsługiwać bezpośrednio z już istniejącego pliku projektu.
PS: Przepraszam za długi post xD
źródło