Có API Lua nào hoạt động với C # cho PC & XBox 360 Development không? [đóng cửa]


18

Tôi đang đọc một cuốn sách về Phát triển trò chơi, trong đó họ chỉ cho bạn cách tạo kịch bản cho trò chơi của bạn ở Lua. Họ lập trình Lua và sử dụng nó từ C ++, nhưng tôi đã tự hỏi liệu có thư viện hoặc API để sử dụng Lua từ C #: cụ thể là từ XNA để phát triển trò chơi cho PC XBox 360 không?


5
Một loại nitlog nhỏ, nhưng đó là Lua (tên), không phải LUA (từ viết tắt, hoặc bạn đang hét lên)
RCIX

Từ trang "Giới thiệu" của Lua: "Lua đã được sử dụng để mở rộng các chương trình được viết không chỉ bằng C và C ++, mà còn trong ... C # ...". Kết quả đầu tiên từ Google cho "lua in C #" là một bài viết thú vị từ GameDev.net ( gamedev.net/reference/articles/article2275.asp ) có tiêu đề Sử dụng Lua với C #.
Reverbb

Rất nhiều nhà phát triển .net sử dụng ironpython hoặc ironruby để viết kịch bản.
Ripped Off

Câu trả lời:


6

Đây là tôi sẽ chỉ cho bạn (http://www.xnua.com/xna_lua_xnua), nhưng nó đã không được cập nhật trong một thời gian dài.

C # là ngôn ngữ tuyệt vời và theo một nghĩa nào đó có thể được sử dụng làm ngôn ngữ kịch bản trong trò chơi c # của bạn. Nick Gravelyn đã tạo ra một số hướng dẫn tốt đẹp về công cụ gạch (http://blog.nickgravelyn.com/doads/#tileengine) và sử dụng một công cụ kịch bản tùy chỉnh để tắt hộp thoại. Anh ấy cũng có một ví dụ cơ bản khi tìm hiểu về từ khóa "suất": http://blog.nickgravelyn.com/2010/02/the-magic-of-yield/


3
Một số điểm tốt ở đây. Một điều cần suy nghĩ, là tại sao bạn muốn có một ngôn ngữ kịch bản khi trò chơi của bạn được viết bằng c #? Các công cụ C ++ có thể đạt được rất nhiều sự linh hoạt từ việc sử dụng ngôn ngữ kịch bản, vì C ++ thường mất nhiều thời gian để biên dịch. C # là nhanh chóng trong vấn đề này. Nếu vì lý do nào đó bạn muốn tập lệnh của mình được biên dịch trong thời gian chạy, bạn luôn có thể sử dụng CodeDom (hoặc bất kỳ phương thức tạo mã nào khác) để biên dịch tệp CS khi tải, nhưng điều này chỉ hoạt động trên PC. Có một chương về điều này trong cuốn sách "Phát triển công cụ trò chơi"
Cubed2D

^^ Phát triển công cụ trò chơi là một cuốn sách hay :). Bây giờ nó đã hơi lỗi thời, nhưng các khái niệm vẫn còn vững chắc. Vấn đề với các ràng buộc ngôn ngữ kịch bản .NET là, để chạy trên Xbox 360, chúng phải được giải thích khá nhiều. Nếu không có System.Reflection.Emit, bạn không thể làm gì nhiều trong cách tạo mã. Tôi có ấn tượng rằng những khả năng này sẽ đến với Xbox 360 trong tương lai gần, nhưng dựa trên cuộc thảo luận bình luận trong bài trả lời của tôi dưới đây, đây có lẽ không phải là trường hợp. Do đó, hiệu suất tập lệnh trên Xbox 360 có thể sẽ không tuyệt vời như vậy :(.
Mike Strobel

@ Cubed2D: Lua là một loại tiêu chuẩn công nghiệp cho các trò chơi kịch bản, và nó cũng dễ hiểu hơn đối với các lập trình viên không chuyên nghiệp.
RCIX

@ Giống như quyền của bạn, có thể biên dịch hoặc tạo mã trên 360. Nếu tôi sẽ triển khai điều này, tôi sẽ không hỗ trợ các tập lệnh c # trên 360 và chỉ có nó như là một tính năng của bộ công cụ pc. Chỉ cần tinh chỉnh dự án vs để bao gồm thư mục script trên bản dựng 360 và bỏ qua trên pc. @RCIX chỉ vì những người khác làm điều đó, không có nghĩa là bạn nên làm vậy. Nếu bạn muốn sử dụng Xna, nó sẽ gặp nhiều rắc rối hơn giá trị của nó. Có nhiều cách tốt hơn để hiển thị các tham số có thể điều chỉnh cho những người không phải là lập trình viên trong thế giới .net đang cố gắng thực hiện lua (điều mà tôi cho là bạn nhận được với nhận xét không phải là lập trình viên của bạn)
Cubed2D

@ Cubed2D: Đó là một điểm tốt, nhưng nó thực sự phụ thuộc vào nền tảng mục tiêu của bạn. nếu bạn chỉ viết cho PC, thì bạn có thể sử dụng LuaInterface và lua dll bản địa, và không phải viết một bản triển khai. Bên cạnh đó, vấn đề là vì nó có một vị trí như vậy trong thế giới phát triển trò chơi, nên các tính năng được phát triển tự nhiên giúp nó tốt cho môi trường đó. Hơn nữa, tôi đã bắt đầu chính vào lập trình thông qua Lua và tôi cá là nhiều người đã làm vậy, vì vậy mọi người đều muốn sử dụng nó.
RCIX

2

Nếu bạn đang tìm kiếm kịch bản trong C #, chắc chắn hãy xem IronPython . Đây không chỉ là API python cho C #, đây thực sự là một triển khai python hoàn toàn riêng biệt, biên dịch cho cùng một cụm CLR (có cùng hiệu suất) mà C # thực hiện, nhưng có thể được giao tiếp như một ngôn ngữ kịch bản. Bất kỳ trình bao bọc Lua nào cho C # sẽ chậm hơn nhiều do chi phí của Marshalling.


2

Như Sean đã nói, IronPython đáng để xem xét. IronPython thực sự là một trong một vài triển khai ngôn ngữ động cho .NET nhắm mục tiêu Thời gian chạy ngôn ngữ động (DLR). Có ít nhất một dự án nguồn mở nhằm thực hiện Lua trên DLR (như này ), nhưng tôi không chắc liệu có bất kỳ triển khai nào sắp hoàn thành hay không. Một tập hợp các ràng buộc DLR được triển khai tốt cho Lua sẽ cung cấp hiệu năng ngang bằng với IronPython và IronRuby, và sẽ nhanh hơn nhiều so với trình bao bọc Lua. Để dễ so sánh, IronPython thường hoạt động tốt hơn CPython (đôi khi tốt hơn đáng kể).

Lưu ý: Khi ElementCy khẳng định dưới đây, ngôn ngữ DLR thường không được hỗ trợ trên Xbox 360. Tuy nhiên, có một "chế độ giải thích" trong DLR. Tôi không biết đủ về điều đó để nói chắc chắn, nhưng có thể khiến IronPython (hoặc các triển khai ngôn ngữ DLR khác) chạy trên Xbox 360 ở chế độ diễn giải, mặc dù hiệu suất chắc chắn sẽ bị ảnh hưởng. Có thể đáng để hỏi ai đó trong nhóm DLR xem họ có biết điều này là có thể không. Nếu không, Xbox 360 sẽ nhận được hỗ trợ Reflection.Emit như một phần của hỗ trợ Silverlight sắp tới. Nếu và khi điều đó xảy ra, tôi tưởng tượng việc bật DLR và chạy trên Xbox 360 sẽ không thành vấn đề.


4
Chỉ có vấn đề với IronPython, nó sẽ không chạy trên xbox360. Sẽ ổn nếu bạn chỉ muốn sử dụng nó cho PC. IronPyton sử dụng System.Reflection.Emit rất nhiều và điều đó không có sẵn trên .net Framework của Xbox.
ElementCy

Một điểm rất tốt. Cập nhật.
Mike Strobel

2
Đừng nghĩ rằng xbox sẽ nhận được Reflection. Hãy nhận bất cứ lúc nào sớm, vì winPhone có cả xna và silverlight và không hỗ trợ không gian tên đó
Cubed2D

1
Bạn có thể đúng. WP7 không thực sự chạy Silverlight, nhưng "Silverlight Mobile Compact Framework", dựa trên .NET CF thay vì .NET. Tôi tin rằng Xbox 360 cũng chạy .NET CF thay vì .NET Framework đầy đủ, do đó có khả năng nó sẽ kết thúc với việc triển khai tương tự như của WP7. Ồ tốt
Mike Strobel

2

Giải pháp tốt nhất tôi có thể cung cấp cho bạn là chỉ viết kịch bản trong C #. Bạn có thể biên dịch chúng trong thời gian chạy khi bạn nhắm mục tiêu các cửa sổ và biên dịch chúng trước khi sử dụng xbox. (như một dll)

Đó sẽ là giải pháp dễ nhất. Bạn cũng có thể làm điều đó bằng VB.NET hoặc bất kỳ ngôn ngữ .NET nào. (không chắc chắn về các kịch bản mặc dù) Về cơ bản, tôi đang nói để có các kịch bản của bạn trong dll riêng của họ. Bạn có thể yêu cầu chúng biên dịch khi chạy trên Windows. (bạn có thực sự muốn họ làm điều này trên xbox 360 không?, bạn không thể cập nhật các trò chơi của mình trên đó, ít nhất là tôi không nghĩ vậy)

Tôi có thể hiểu sự thất vọng của bạn, tôi cũng muốn sử dụng Lua.

Để tổng hợp: 1) Đã xây dựng nó trong thời gian chạy trên Windows 2) Xây dựng nó trước khi sử dụng Xbox 360

Đó là những gì tôi khuyên bạn nên.


1
  1. Trình thông dịch Lua không được quản lý, AFAIK, vì vậy bạn không thể làm cho nó hoạt động trên Xbox với XNA

  2. Bạn có thể sử dụng trình thông dịch Javascript có tên là Jint không dựa trên DLR và hoạt động trên Xbox ( http://jint.codeplex.com/ )


Tôi đã nói điểm đầu tiên là không đúng sự thật, vì có một số liên kết ở đây có Lua <-> C #.
Vịt Cộng sản

Bạn chỉ có thể chạy mã được quản lý trên Xbox. Cầu Lua <-> C # là mã không được quản lý cho phép bạn gọi Lua từ mã được quản lý; cho đến khi MS đưa nó vào XNA hoặc Xbox 360 OS, bạn không thể chạy nó ở đó.

0

Về mặt kỹ thuật, nó không trả lời câu hỏi của bạn (không hoạt động trên xbox), nhưng LuaInterface cho phép Lua tích hợp với C # tương đối không gây đau đớn.


0

Chỉ để cập nhật câu hỏi này, tôi đã dành một ngày cuối cùng để thực hiện một số tìm kiếm mở rộng và tôi đã thấy rằng sử dụng UniLua (được sử dụng để thống nhất, triển khai C # thuần túy) là lựa chọn tốt nhất và hiệu quả nhất để tải Lua trên Xbox. Tôi lột nó xuống, lấy ra tất cả các tài liệu của Unity, và nó hoạt động rất tốt.

Tôi cũng đã thêm một số chức năng được tìm thấy trong LuaInterface bằng cách nạp chồng toán tử [] cho LuaState, v.v.

CFWLua

Tôi hy vọng điều này là hữu ích.

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.