Memfasilitasi penyebaran game XNA untuk yang bukan programmer

12

Saat ini saya sedang mengerjakan RPG, menggunakan starter kit RPG dari XNA sebagai basis. (http://xbox.create.msdn.com/en-US/education/catalog/sample/roleplaying_game) Saya bekerja dengan tim kecil (dua desainer dan satu musik / artis musik), tapi hanya saya yang programmer. Saat ini, kami sedang bekerja dengan sistem berikut (tidak berkelanjutan): tim membuat gambar / suara baru untuk ditambahkan ke permainan, atau mereka memodifikasi suara / foto yang ada, kemudian mereka melakukan pekerjaan mereka ke repositori, di mana kami menyimpan bangunan saat ini dari segalanya. (Kode, gambar, suara, dll.) Setiap hari atau lebih, saya membuat installer baru, yang mencerminkan gambar baru, perubahan kode, dan suara, dan semua orang menginstalnya.

Masalah saya adalah ini: Saya ingin membuat sistem di mana anggota tim lainnya dapat mengganti suara pertempuran, misalnya, dan mereka dapat segera melihat perubahannya, tanpa harus menunggu saya untuk membangun. Cara pengaturan XNA, jika saya publikasikan, ini mengkode semua file gambar dan suara, sehingga tim tidak dapat "hot swap." Saya dapat mengatur Microsoft VS di mesin semua orang dan menunjukkan kepada mereka cara mempublikasikan dengan cepat, tetapi saya ingin tahu apakah ada cara yang lebih sederhana untuk melakukan ini.

Adakah yang menentang hal ini ketika bekerja dengan tim yang menggunakan XNA?

Sal
sumber
2
Dengan XNA menyandikan semua gambar dan file suara, apakah maksud Anda bahwa mereka dibangun oleh pipa konten XNA dan diubah menjadi file .xnb?
David Gouveia
Saya tidak ingat ekstensi persisnya, tetapi mereka memang melalui pipa standar, ya.
Sal

Jawaban:

12

Pertama-tama, saya pikir Anda tidak perlu menerbitkan dan membuat installer setiap saat. Bangun saja proyek dan letakkan file output (yaitu EXE dan folder Konten ditambah dependensi DLL yang mungkin Anda gunakan) di repositori, dan itu harus berjalan di komputer mereka juga, selama mereka memiliki redist XNA diinstal.

Adapun pertanyaan Anda, saya bisa memikirkan dua solusi, salah satunya melibatkan menginstal Visual Studio pada mesin mereka, dan yang lainnya melibatkan membuat beberapa perubahan pada game:

  • Mintalah mereka menginstal Visual Studio dan mengajari mereka untuk menyerahkan aset mereka melalui pipa konten XNA. Mereka hanya perlu membuat proyek pipa konten, seret file ke sana dan bangun. Kemudian mereka dapat menukar file XNB yang dihasilkan dengan yang ada di folder proyek, dan menjalankan EXE untuk melihat perubahan.

  • Jika Anda mengembangkan untuk Windows, Anda dapat mengubah kode Anda sehingga memuat aset saat runtime dalam format aslinya, tanpa harus melalui pipa konten. Untuk memuat gambar yang dapat Anda gunakan Texture2D.FromStream(seperti contoh ini ) dan untuk audio, solusi terbaik yang saya temukan adalah dengan menggunakan API FMOD (seperti contoh ini ). Kemudian mereka bisa menukar aset secara langsung dan menjalankan game.

Untuk membuat segalanya lebih jauh, Anda juga bisa mencoba membuat game Anda didorong oleh data. Ini pada dasarnya berarti bahwa segala sesuatu dalam gim yang harus Anda ubah dengan mudah, seperti statistik kelas karakter, atau jalur gambar dan file suara yang Anda gunakan, harus dikeluarkan dari kode dan ditempatkan dalam file teks eksternal (mis. XML, JSON, INI). Maka Anda hanya perlu mengedit file-file itu dalam editor teks untuk melihat perubahan dalam gim, dan tidak perlu membangun kembali.

David Gouveia
sumber
1
Terima kasih atas tanggapan cepat Anda. Saya menyukai solusi kedua Anda, dan saya punya pertanyaan yang muncul darinya: apakah ada cara di VS untuk membuat bendera yang serupa dengan gaya #IF DEBUG, yang memungkinkan saya melakukan sesuatu seperti, #IF NON_PRODUCTION_MODE, dengan cara itu saya bisa membungkus semua panggilan FromStream () di panggilan non-produksi ini. Akhirnya, ketika saya siap untuk mengirim game ke dalam produksi, saya akan dengan mudah dapat beralih mode, dan menyandikan file suara lagi.
Sal
1
@ Sal Ya Anda bisa melakukan hal itu. Periksa dokumentasinya di sini .
David Gouveia
1
@ Sal Secara default, Visual Studio membuat dua profil build: Debug dan Release. Anda dapat bertukar di antara keduanya dari Build->Configuration Manager. Secara default, build Debug DEBUGmendefinisikan simbol kompilasi, yang berarti Anda dapat membungkus kode non-rilis Anda dengan #if ( DEBUG ) doStuffIWouldntDoInRelease(); #elif theActualReleaseCode(); #endif.
Cypher
1
@ Sal juga, saya menemukan itu jauh lebih mudah untuk hanya memasukkan direktori bin / * dalam repositori, dan meminta desainer / artis / qa untuk hanya memeriksa folder bin sehingga mereka dapat menjalankan yang terbaru dan terhebat. Dengan melakukan itu, mereka mendapatkan semua dependensi, tekstur, audio, dll. Kemudian setiap hari yang harus mereka lakukan adalah svn updatepada direktori kerja mereka dan mereka dengan cepat.
Cypher
4

Sedikit terlambat ke pesta, tapi ini ide saya.

Saya akan pergi dengan kemungkinan ke-3 yang tidak melibatkan seperti memodifikasi basis kode yang sudah ada. Ini akan berfungsi jika, Anda akan mengkomit (dan menyalin) binari (gim aktual .exe dan .dlls yang terkait dari kompilasi) di suatu tempat di direktori keluaran - misalnya dengan skrip post-build. Selanjutnya, saya akan berasumsi kita berbicara tentang Visual Studio 2010 dan XNA Game Studio 4.0 (Prosedur ini sangat mirip untuk versi lain, hanya perlu mengganti beberapa angka)

Jadi, idenya adalah: buat skrip (.cmd) di root proyek Anda, tempat solusi .sln berada, dengan langkah-langkah berikut:

  1. Meminta "Visual Studio 2010 Command Prompt":

    panggil "C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ vcvarsall.bat" x86

    Ini agar skrip kami dapat menemukan pustaka XNA, dan semua alat dan binari yang diperlukan.

  2. Panggil tugas MSBuild di Proyek Konten (.contentproj):

    msbuild / properti: XNAContentPipelineTargetPlatform = Windows / properti: XNAContentPipelineTargetProfile = Raih mygame.content / projectfile.contentproj

    Anda dapat memodifikasi properti dengan platform / profil berbeda yang ditentukan. Anda bahkan dapat melangkah lebih jauh untuk membangun konten untuk lebih banyak platform sekaligus (Windows Phone, Xbox 360 atau Windows). Profil dapat berupa: Jangkauan atau HiDef (http://msdn.microsoft.com/en-us/library/ff604995.aspx)

  3. Salin secara rekursi keluaran ke folder tempat binari + gim sebenarnya disimpan di repositori:

    xcopy / d / y / i / e bin \ x86 \ Debug \ Content * .. \ game_output \ Content

    Untuk rincian tentang bendera, Anda dapat meminta pada command prompt: xcopy /?. Yang penting adalah:, /duntuk menyalin hanya file yang dimodifikasi - jika Anda memiliki banyak aset, sebaiknya jangan menyalin yang berulang-ulang yang sudah ada dan tidak dimodifikasi; /yuntuk secara otomatis menimpa file yang sudah ada sehingga mereka dapat diperbarui dengan versi yang lebih baru. Saya telah menggunakan xcopykarena yang normal copytidak dapat menyalin folder secara rekursif sejauh yang saya tahu - dan mungkin Anda menyusun konten dalam folder dan sub-folder. Plus, ini lebih baik daripada yang normal copy(banyak bendera berbeda).

  4. Panggil pausebegitu skrip akan menunggu input pengguna. Ini berguna untuk memeriksa apakah build-nya baik-baik saja dan tidak ditemukan kesalahan.

Sekarang, para seniman (atau siapa saja) yang memodifikasi file konten, hanya perlu mengklik dua kali skrip .cmd dan konten baru akan dibangun dan disalin ke direktori output di mana artefak yang berkomitmen, siap untuk diuji.

Namun, ada masalah kecil, di mana Anda harus mundur ke poin pertama dari postingan David: jika artis ingin memodifikasi proyek Konten dengan menambahkan / menghapus / memindahkan file, mereka harus melakukannya dengan membuka proyek di Visual Studio (atau mengedit file proyek dengan tangan, yang saya ragu orang akan melakukannya). Seperti yang saya katakan, ini adalah masalah kecil, karena mereka hanya bisa mengkomit file-file baru dalam repositori, dan Anda, pembuat kode akan memasukkannya dalam Proyek Konten ketika kode dilakukan untuk menangani itu.

Atas ide ini, Shawn Hargreaveas memposting sesuatu tentang msbuild dan membangun Proyek Konten dari baris perintah: http://blogs.msdn.com/b/shawnhar/archive/2006/11/07/build-it-ahead-of-time .aspx Solusinya adalah membuat file baru, tapi saya pikir lebih mudah dan lebih dapat dikelola untuk menggunakan langsung file proyek yang sudah ada.

PS: Maaf untuk posting lama xD

Timotei
sumber