2013-03-12 43 views
7

Tôi đang tạo trò chơi XNA, nơi tôi thường kiểm tra những thứ không thể chỉnh sửa mà không cần xây dựng lại toàn bộ ứng dụng trò chơi (chỉnh sửa và tiếp tục không hoạt động). Đến mức mà tôi thực sự thử nghiệm mọi thứ có thể mất khá nhiều thời gian, bởi vì trò chơi cần tải tài nguyên của nó.Truy cập các đối tượng từ một quy trình khác

Điều tôi muốn làm là có thể tải tài nguyên cho một số ứng dụng sao lưu và truy cập chúng từ ứng dụng trò chơi bằng cách nào đó, loại bỏ nhu cầu tải lại phần tử trò chơi phần lớn thời gian. Là nó có thể trong các ứng dụng. Net, hoặc là có một số phương pháp khác tôi nên biết về?

Trò chơi XNA của tôi dựa chủ yếu vào các trường hợp Texture2D, cụ thể là lớp thư viện với một số đối tượng Dictionary<string, Texture2D>.

Tôi nghĩ rằng những gì tôi muốn có thể làm là có quyền truy cập trực tiếp vào các từ điển đó trong ứng dụng sao lưu từ bên trong ứng dụng trò chơi. Trò chơi XNA chỉ có thể được nhắm mục tiêu ở nền tảng 32 bit và tôi muốn ứng dụng sao lưu là 64 bit, vì vậy, nó có thể chứa hơn 1 (0,5) Gigabyte dữ liệu tài nguyên (nếu có thể).


Phương pháp thử nghiệm đơn vị (hoặc bất kỳ điều gì ngụ ý không sử dụng một số tài nguyên) sẽ không hoạt động đối với tôi trong trường hợp này, vì tôi đang phát triển các hiệu ứng hình ảnh.

+0

Có thể bạn có thể thiết kế các bài kiểm tra đơn vị tốt hơn mà không tải các tài nguyên khổng lồ và sử dụng dữ liệu mô phỏng thay vì số lượng lớn dữ liệu cần thiết cho phiên bản sản xuất. http://stackoverflow.com/questions/14087/automated-testing-a-game#14136. http://stackoverflow.com/questions/32835/xna-unit-testing – Despertar

Trả lời

-1

Tất cả đều thuộc loại tài nguyên bạn muốn tải vào thời gian chạy. Nếu bạn chỉ muốn thử nghiệm các tài sản kết cấu/âm thanh, thì điều này có thể được giải quyết bằng cách sử dụng các phương pháp Texture2D.FromFileSoundEffect.FromStream (PHẢI là tệp sóng PCM). Tuy nhiên, nếu bạn muốn tải các mô hình động, điều đó đòi hỏi một chút nỗ lực. Việc thích ứng với sample này sẽ có thể thực hiện những gì bạn cần.

+0

Không có sự khác biệt đáng kể giữa tải tài nguyên đã biên dịch hoặc tệp hình ảnh thô, hoặc là phải mất rất nhiều thời gian để tải tất cả trước khi ứng dụng truy cập màn hình đầu tiên. Tôi muốn tránh làm việc đó mọi lúc, và thay vào đó chỉ tải các tài nguyên một lần và giữ chúng sẵn sàng cho các ứng dụng trò chơi mới được biên dịch. – user1306322

+0

Vâng, nếu đây là vấn đề tốc độ/chặn bạn có thể thử chứa tất cả quản lý nội dung trong một chuỗi riêng biệt (với trình bao bọc Cell mutex) và thăm dò ý kiến ​​để kiểm tra xem nội dung có được tải đầy đủ hay không. Bài đăng trên blog này cung cấp một tổng quan khá tốt về tải nội dung an toàn theo luồng trong XNA: http://konaju.com/?p=27. Tuy nhiên, XNA áp đặt một phần quan trọng trên bất kỳ việc sử dụng một GraphicsDevice, vì vậy nếu bạn đang cố gắng làm rất nhiều hoạt hình/tải tài sản này có thể làm cho dự án của bạn chậm hơn. Trong trường hợp đó, điều này có thể làm việc beter: http://theinstructionlimit.com/a-shared-content-manager-for-xna. –

+0

Đó là 2688 tệp hình ảnh riêng biệt, không có gì có thể được thực hiện để tăng tốc độ * mà * đủ. Trừ khi chúng đã được tải và có sẵn bất cứ lúc nào. – user1306322

0

Nếu bạn muốn có nhà cung cấp/máy chủ động cho tài nguyên của mình, bạn có toàn bộ khả năng. Với C# bạn có thể sử dụng f.e. WCF để cung cấp tài nguyên của bạn. Nhưng như đã đề cập trước đây có lẽ bạn nên cố gắng tách rời thiết kế của mình để bạn có thể sử dụng thử nghiệm đơn vị thay vì bắt đầu toàn bộ trò chơi.

http://en.wikipedia.org/wiki/Unit_testing

+0

Thật không may, hầu hết các chức năng mới có liên quan chặt chẽ với tất cả các khía cạnh của trò chơi, vì vậy tôi cần nhiều thứ để tải để tôi có thể nhìn thấy bằng mắt của mình những thay đổi, đòi hỏi tất cả các họa tiết. – user1306322

+0

Công cụ bạn đang thay đổi là gì? – SACO

+0

Menu có các nút chạy các phương thức làm tất cả các loại trò chơi liên quan đến cơ khí, như tạo ra một loạt đạn, chạy một số hoạt ảnh, sửa đổi các thuộc tính hạt và điều đó có nghĩa là tôi cần xem chúng. – user1306322

2

Nếu bạn muốn dỡ bỏ một tải lại biên soạn dlls đầy đủ các nguồn lực thì bạn có thể muốn xem xét ứng dụng tên miền. tức là bạn có thể tháo dỡ và tải lại các hội đồng với nó. Nhưng bạn phải truy cập nội dung của họ thông qua "proxy". Bạn không thể dỡ bỏ các hội đồng trực tiếp, đó là lý do tại sao bạn cần các miền.

Ý tưởng sẽ là tải lên ứng dụng chính không bao giờ đóng. Sau đó, bạn có một Game.dll riêng biệt mà bạn tải lên trong Miền ứng dụng riêng của nó. Sau đó bạn tải tất cả các tài nguyên của bạn trong ứng dụng chính của bạn. Vì vậy, bạn sẽ cần phải thực hiện một "proxy" giao diện cho các trò chơi để có được giữ các nguồn tài nguyên, nhưng điều đó nên được doable.

Điều tốt về việc này là bạn dừng game.dll của mình, biên dịch lại, tải lại bản lắp ráp và cung cấp cho nó các tài nguyên được tải.

Một tuyến đường có thể.

+0

Nghe giống như những gì tôi nghĩ, nhưng làm cách nào để làm điều đó một cách chính xác? – user1306322

+0

Bạn cần hỏi/trả lời một câu hỏi khác: _Bạn có thể chia sẻ tài nguyên XNA qua miền thông qua proxy không. Nếu bạn muốn đi xuống con đường này, bạn cần phải hỏi điều này trước. Tôi không thể giúp bạn với cái đó. –

+0

Tôi nghĩ rằng * Tài nguyên XNA * nằm trong danh mục * .Net tài nguyên *, ít nhất tôi không nghĩ rằng sẽ có thêm bất kỳ vấn đề nào khi chia sẻ các trường hợp 'Texture2D' hơn' System.Drawing.Bitmap'. – user1306322

0

tại sao không sử dụng WCF Đặt tên cho đường ống?

chỉ làm cho ứng dụng của bạn như WCF server sử dụng named pip và cung cấp Set (string spriteName, Texture2D texture)

rằng sẽ làm thay đổi kết cấu ..

Các vấn đề liên quan