2011-11-18 36 views
6

Tôi đang viết một hệ thống hạt. (đối với trò chơi và trình chỉnh sửa hạt) Trong hệ thống này có từ 0 đến n công cụ sửa đổi. Những thay đổi các hạt trong hệ thống hạt mỗi khung.Tôi nên sử dụng phương pháp nào cho C# scripting

Ví dụ: bạn có thể có một công cụ sửa đổi được xác định trước có tên "GravityModifier" chỉ làm như sau cho mọi hạt mỗi khung: "particle.Velocity.Y + = 9.81" hoặc một cái gì đó tương tự.

Bây giờ tôi muốn người dùng có thể viết các công cụ sửa đổi bổ sung khi chạy (trong trình chỉnh sửa). Tôi muốn có thể sử dụng C# cho việc này. Và kể từ khi hệ thống hạt được ghi vào tệp JSON, các tập lệnh sửa đổi tùy chỉnh phải được viết dưới dạng mã nguồn (có thể mã hóa base64) thành tệp.

-

Câu hỏi của tôi là: Giả sử trò chơi muốn nạp như một tập tin hệ thống hạt. Làm cách nào để biên dịch các công cụ sửa đổi tùy chỉnh thành mã thực thi?

Một điều rất quan trọng khác cần xem xét khi trả lời câu hỏi này: Lưu ý rằng đây sẽ là hệ thống hạt cho trò chơi. Mã được biên dịch sẽ được gọi nhiều hơn 3000 lần mỗi khung hình. (chủ yếu là 60fps) Vì vậy, điều rất quan trọng là mã được biên dịch không mất nhiều thời gian để thực thi hơn các chức năng trò chơi khác. Sẽ thật tuyệt nếu có các tập lệnh bổ trợ được biên dịch thành các đại biểu của biểu mẫu: delegate void ModifyParticle (ref Particle p);

Điều này có khả thi không? Nếu vậy, làm thế nào?

+0

Bạn cũng có thể nhận được một số ý tưởng hay bằng cách tìm kiếm chủ đề này trên [gamedev] (http://gamedev.stackexchange.com/). Nhưng, tôi nghĩ rằng đó vẫn là một câu hỏi hay cho trang web này. – jadarnel27

+0

Tôi nghĩ rằng có một số trò chơi thương mại (Second Life) sử dụng Mono như một công cụ tạo kịch bản: http://www.mono-project.com/Scripting_With_Mono –

Trả lời

5

Có,

Điều này có thể và khá đơn giản khi sử dụng CSScript library.

+0

Xin cảm ơn! Đây chính xác là những gì tôi cần! Cụ thể các ví dụ với LoadMethod (...) & GetStaticMethod() Nó hoạt động như mong đợi và cung cấp tốc độ tương tự như thực hiện một phương pháp "bản địa" tĩnh! Đây là hoàn hảo. – riki

2

Kiểm tra Roslyn, đây là bản xem trước sắp tới (nhưng vẫn còn rất sớm) của tính năng C# trình biên dịch-như-dịch vụ trong .NET Framework tiếp theo.

0

Thay vào đó, khoảng Lua? Xem here Lua là một ngôn ngữ kịch bản đơn giản tuyệt vời và lý tưởng cho việc thực hiện các hành động trong trò chơi. Khá nhiều trò chơi iPhone sử dụng Lua trong mục tiêu-c, và có rất nhiều người sử dụng Lua thông qua .Net quá.

0

Sử dụng được xây dựng trong trình biên dịch từ Microsoft trong .NET CSharpCodeProvider:

Làm thế nào để lập trình biên dịch mã sử dụng biên dịch C#:

.NET Framework cho thấy các lớp học cho phép bạn lập trình truy cập C# trình biên dịch ngôn ngữ. Điều này có thể hữu ích nếu bạn muốn viết các tiện ích biên dịch mã của riêng bạn. Bài viết này cung cấp mã mẫu cho phép bạn biên dịch mã từ nguồn văn bản.Ứng dụng cho phép bạn chỉ cần xây dựng tệp thi hành hoặc xây dựng tệp thi hành và chạy nó. Bất kỳ lỗi nào xảy ra trong quá trình biên dịch đều được hiển thị trên biểu mẫu.

http://support.microsoft.com/kb/304655

Đơn giản chỉ cần biên dịch và tải các tập tin nhị phân khi bạn bắt đầu trò chơi.

Các ví dụ khác về cách biên dịch và tải/thực thi trực tiếp tại số http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx và nội dung được cộng đồng thêm vào.

+0

Chăm sóc để xây dựng trên phiếu bầu xuống? – stefan

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