Tạo điều kiện triển khai trò chơi XNA cho người không lập trình


12

Tôi hiện đang làm việc trên một game nhập vai, sử dụng bộ khởi động RPG từ XNA làm cơ sở. (http://xbox.create.msdn.com/en-US/education/catalog/sample/roleplaying_game) Tôi đang làm việc với một nhóm nhỏ (hai nhà thiết kế và một nghệ sĩ âm nhạc / âm thanh), nhưng tôi là người duy nhất lập trình viên. Hiện tại, chúng tôi đang làm việc với hệ thống sau (không bền vững): nhóm tạo ra các bức ảnh / âm thanh mới để thêm vào trò chơi hoặc họ sửa đổi âm thanh / hình ảnh hiện có, sau đó họ cam kết công việc của mình với một kho lưu trữ, nơi chúng tôi giữ bản dựng hiện tại của tất cả mọi thứ. (Mã, hình ảnh, âm thanh, v.v.) Mỗi ​​ngày, tôi tạo một trình cài đặt mới, phản ánh các hình ảnh mới, thay đổi mã và âm thanh, và mọi người đều cài đặt nó.

Vấn đề của tôi là: Tôi muốn tạo ra một hệ thống trong đó phần còn lại của đội có thể thay thế âm thanh chiến đấu, và họ có thể thấy ngay những thay đổi, mà không phải chờ tôi xây dựng. Cách thiết lập của XNA, nếu tôi xuất bản, nó mã hóa tất cả các tệp hình ảnh và âm thanh, vì vậy nhóm không thể "trao đổi nóng". Tôi có thể thiết lập Microsoft VS trên máy của mọi người và chỉ cho họ cách xuất bản nhanh chóng, nhưng tôi muốn biết liệu có cách nào đơn giản hơn để làm việc này không.

Có ai đã chống lại điều này khi làm việc với các đội sử dụng XNA không?


2
Bằng cách mã hóa XNA tất cả các tệp hình ảnh và âm thanh, bạn có nghĩa là chúng được xây dựng bởi đường ống nội dung XNA và biến thành các tệp .xnb?
David Gouveia

Tôi không thể nhớ phần mở rộng chính xác, nhưng chúng đi qua đường ống tiêu chuẩn, yeah.
Sal

Câu trả lời:


12

Trước hết, tôi không nghĩ bạn cần xuất bản và tạo trình cài đặt mỗi lần. Chỉ cần xây dựng dự án và đặt các tệp đầu ra (tức là thư mục EXE và thư mục Nội dung cộng với bất kỳ phụ thuộc DLL nào bạn có thể đang sử dụng) trong kho lưu trữ và nó cũng sẽ chạy trên máy tính của chúng, miễn là chúng đã cài đặt lại XNA.

Đối với câu hỏi của bạn, tôi có thể nghĩ ra hai giải pháp, một trong số đó là cài đặt Visual Studio trên máy của họ và một giải pháp khác liên quan đến việc thực hiện một số thay đổi cho trò chơi:

  • Yêu cầu họ cài đặt Visual Studio và dạy họ chuyển tài sản của họ thông qua đường ống nội dung XNA. Họ chỉ cần tạo một dự án đường ống nội dung, kéo các tệp ở đó và xây dựng. Sau đó, họ có thể trao đổi các tệp XNB kết quả với các tệp trong thư mục dự án và chạy EXE để xem các thay đổi.

  • Nếu bạn đang phát triển cho Windows, bạn có thể thay đổi mã của mình để nó tải tài sản khi chạy ở định dạng ban đầu mà không phải thông qua đường ống nội dung. Để tải hình ảnh bạn có thể sử dụng Texture2D.FromStream(như ví dụ này ) và cho âm thanh, giải pháp tốt nhất tôi tìm thấy là sử dụng API FMOD thay thế (như ví dụ này ). Sau đó, họ có thể trao đổi tài sản trực tiếp và chạy trò chơi.

Để đưa mọi thứ đi xa hơn, bạn cũng có thể cố gắng làm cho trò chơi của mình được điều khiển theo dữ liệu nhất có thể. Điều này về cơ bản có nghĩa là mọi thứ trong trò chơi mà bạn sẽ có thể thay đổi dễ dàng, chẳng hạn như chỉ số lớp nhân vật hoặc đường dẫn của tệp hình ảnh và âm thanh bạn đang sử dụng, nên được lấy ra khỏi mã và đặt vào các tệp văn bản bên ngoài (ví dụ: XML, JSON, INI). Sau đó, bạn chỉ cần chỉnh sửa các tệp đó trong trình soạn thảo văn bản để xem các thay đổi trong trò chơi và không cần phải xây dựng lại.


1
Cám ơn bạn đã phản ứng nhanh chóng của bạn. Tôi thích giải pháp thứ hai của bạn và tôi có một câu hỏi phát sinh từ đó: có cách nào trong VS để tạo một lá cờ có phong cách tương tự như #IF DEBUG, cho phép tôi làm điều gì đó như, #IF NON_PRODITH_MODE, bằng cách đó tôi có thể gói tất cả các lệnh gọi FromStream () trong cuộc gọi không sản xuất này. Cuối cùng, khi tôi sẵn sàng đưa trò chơi vào sản xuất, tôi sẽ dễ dàng có thể chuyển đổi chế độ và mã hóa lại các tệp âm thanh.
Sal

1
@Sal Có bạn có thể làm điều đó. Kiểm tra tài liệu ở đây .
David Gouveia

1
@Sal Theo mặc định, Visual Studio tạo hai cấu hình xây dựng: Gỡ lỗi và Phát hành. Bạn có thể trao đổi giữa hai từ Build->Configuration Manager. Theo mặc định, bản dựng Debug có DEBUGbiểu tượng biên dịch được xác định, có nghĩa là bạn có thể bọc mã không phát hành của mình #if ( DEBUG ) doStuffIWouldntDoInRelease(); #elif theActualReleaseCode(); #endif.
Cypher

1
@Sal Ngoài ra, tôi thấy việc đưa các thư mục bin / * vào kho lưu trữ trở nên dễ dàng hơn rất nhiều và yêu cầu các nhà thiết kế / nghệ sĩ / qa chỉ kiểm tra thư mục bin để họ có thể chạy các thư mục mới nhất và tốt nhất. Bằng cách đó, họ có được tất cả các phụ thuộc, kết cấu, âm thanh, vv tất cả cùng nhau. Sau đó, mỗi ngày tất cả những gì họ phải làm là svn updatevào thư mục làm việc của họ và họ đã tăng tốc.
Cypher

4

Một chút muộn để đến bữa tiệc, nhưng đây là ý tưởng của tôi.

Tôi sẽ đi với khả năng hiển thị thứ 3 không liên quan gì đến việc sửa đổi cơ sở mã đã có. Điều này sẽ hoạt động nếu, bạn sẽ cam kết (và sao chép) các nhị phân (trò chơi thực tế .exe và các tệp liên kết từ trình biên dịch) ở đâu đó trong thư mục đầu ra - ví dụ với tập lệnh hậu xây dựng. Trở đi, tôi sẽ giả sử chúng ta đang nói về Visual Studio 2010 và XNA Game Studio 4.0 (Quy trình này rất giống với các phiên bản khác, chỉ cần thay thế một số số)

Vì vậy, ý tưởng là: tạo một tập lệnh (.cmd) trong thư mục gốc của dự án của bạn, nơi giải pháp .sln nằm trong đó, với các bước sau:

  1. Gọi "Dấu nhắc lệnh của Visual Studio 2010":

    gọi "C: \ Chương trình tệp (x86) \ Microsoft Visual Studio 10.0 \ VC \ vcvarsall.bat" x86

    Điều này là để tập lệnh của chúng tôi có thể tìm thấy các thư viện XNA và tất cả các công cụ và nhị phân cần thiết.

  2. Gọi tác vụ MSBuild trên Dự án Nội dung (.contentproj):

    msbuild / property: XNAContentPipelineTargetPl platform = Windows / property: XNAContentPipelineTargetProfile = Reach mygame.content / projectfile.contentproj

    Bạn có thể sửa đổi các thuộc tính bằng cách chỉ định các nền tảng / hồ sơ khác nhau. Bạn thậm chí có thể đi xa hơn để xây dựng nội dung cho nhiều nền tảng cùng một lúc (Windows Phone, Xbox 360 hoặc Windows). Cấu hình có thể là: Reach hoặc HiDef (http://msdn.microsoft.com/en-us/l Library / ff604995.aspx)

  3. Sao chép đệ quy đầu ra vào thư mục lưu trữ nhị phân + trò chơi thực tế trên kho lưu trữ:

    xcopy / d / y / i / e bin \ x86 \ Gỡ lỗi \ Nội dung * .. \ gameDefput \ Nội dung

    Để biết chi tiết về các cờ, bạn có thể gọi trong dấu nhắc lệnh : xcopy /?. Những cái quan trọng là : /d, chỉ sao chép các tệp đã sửa đổi - trong trường hợp bạn có nhiều tài sản, không nên sao chép lại nhiều lần các tệp đã tồn tại và chưa sửa đổi; /yđể tự động ghi đè lên các tệp hiện có để chúng có thể được cập nhật với phiên bản mới hơn. Tôi đã sử dụng xcopyvì thông thường copykhông thể sao chép các thư mục đệ quy theo như tôi biết - và có lẽ bạn đang cấu trúc nội dung trong các thư mục và thư mục con. Thêm vào đó, nó tốt hơn bình thường copy(rất nhiều cờ khác nhau).

  4. Gọi pauseđể kịch bản sẽ chờ người dùng nhập liệu. Điều này rất hữu ích để kiểm tra xem bản dựng có ổn không và không gặp phải lỗi nào.

Bây giờ, các nghệ sĩ (hoặc bất kỳ ai) sửa đổi các tệp nội dung, chỉ cần nhấp đúp vào tập lệnh .cmd và nội dung mới sẽ được xây dựng và sao chép vào thư mục đầu ra nơi các tạo tác được cam kết, sẵn sàng để được kiểm tra.

Tuy nhiên, có một vấn đề nhỏ, đó là bạn sẽ phải chuyển sang điểm đầu tiên của bài viết của David: nếu các nghệ sĩ muốn sửa đổi dự án Nội dung bằng cách thêm / xóa / di chuyển xung quanh các tệp, họ phải làm điều đó bằng cách mở dự án trong Visual Studio (hoặc chỉnh sửa tệp dự án bằng tay, điều mà tôi nghi ngờ bất cứ ai sẽ làm). Như tôi đã nói, đây là một vấn đề nhỏ, vì họ chỉ có thể cam kết các tệp mới trong kho lưu trữ và bạn, người viết mã sẽ đưa chúng vào Dự án Nội dung khi mã được xử lý để xử lý chúng.

Về ý tưởng này, Shawn Hargreaveas đã đăng một cái gì đó về msbuild và xây dựng Dự án nội dung từ dòng lệnh: http://bloss.msdn.com/b/shawnhar/archive/2006/11/07/build-it-ahead-of-time .aspx Giải pháp của anh ấy là tạo một tệp mới, nhưng tôi nghĩ việc sử dụng trực tiếp tệp dự án hiện có dễ dàng và dễ bảo trì hơn.

PS: Xin lỗi vì bài viết dài xD

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.