Những ưu và nhược điểm của Lua so với Python là ngôn ngữ kịch bản cho nền tảng XNA / C # là gì? [đóng cửa]


9

Tôi đang suy nghĩ về việc đưa ra một trong những ý tưởng cổ xưa của tôi cho một trò chơi. Điểm cốt lõi của trò chơi này là mức độ tùy biến chức năng của môi trường và các đối tượng trò chơi (như sửa đổi hành vi của vũ khí tàu không gian). Đối với điều này, trò chơi sẽ cần phải có kịch bản. Ngoài ra tôi không nhằm mục đích thương mại hóa nó, nó chỉ là một thử thách lập trình thú vị đối với tôi.

Vì tôi chủ yếu là một người .NET, tôi sẽ sử dụng XNA / C # cho chính trò chơi. Đối với kịch bản, tôi nghĩ về việc đi với Python hoặc Lua. Tôi có kinh nghiệm trước đây với Python và không có gì chống lại nó như một ngôn ngữ. Mặt khác, Lua gần như hoàn toàn mới đối với tôi, bên cạnh một số sửa đổi bổ trợ World of Warcraft nhỏ tôi đã làm ở đây và ở đó, và nó có vẻ đầy hứa hẹn. Vì vậy, đây là câu hỏi của tôi:

Những ưu và nhược điểm của Lua so với Python là ngôn ngữ kịch bản cho nền tảng XNA / C # là gì?

Là một trong số chúng dễ sử dụng hơn với XNA / C #? Có một trong số chúng có một số ưu điểm hoặc nhược điểm cụ thể khi sử dụng với XNA / C # không? Tại sao bạn muốn giới thiệu cái này hơn cái kia cho XNA / C #?


4
Tôi biết bạn không yêu cầu các lựa chọn thay thế, nhưng chỉ trong trường hợp bạn không biết, C # cũng là ngôn ngữ kịch bản hợp lệ và vì bạn đang sử dụng C # nên việc bảo trì rất thấp.
William Mariager

2
Tại sao bạn thậm chí cần một ngôn ngữ kịch bản? Những đồng tiền nào bạn đang mong đợi?
Peter lsted

2
Cả hai đều phổ biến, được sử dụng chuyên nghiệp và chắc chắn có khả năng thực hiện phần kịch bản. Đó chỉ là vấn đề của 99% ứng dụng. Python có một thư viện tiêu chuẩn tốt hơn và theo tôi là ngôn ngữ thân thiện với người dùng hơn.
Cloudanger

1
Dọc theo dòng 'bạn đã xem xét?' Bạn đã xem xét Boo chưa? Nó được thiết kế để viết kịch bản, thay vì tình cờ trở thành ngôn ngữ kịch bản. Tương tự như IronPython, nó có các trình trợ giúp tích hợp để lưu trữ (và thậm chí có thể diễn giải cho các mục tiêu như XBox).
Jonathan Dickinson

1
Ngoài ra, đừng bỏ qua kịch bản hình ảnh (tương tự Staredit - trình chỉnh sửa Starcraft 1).
Jonathan Dickinson

Câu trả lời:


11

Tôi không thể so sánh cả hai, vì tôi chỉ mới có kinh nghiệm nhúng IronPython trong một trò chơi C # cho đến nay. Đây là những gì tôi thích về nó mặc dù:

1) Thật dễ dàng! Tải xuống DLL IronPython, thêm tài liệu tham khảo trong dự án,

 using IronPython.Hosting;

 var engine = Python.CreateEngine();
 var product = engine.Execute<System.Numerics.BigInteger>(@"
 print ' '.join(['hello', 'from', 'ironpython!'])
 a = 123456789
 b = 10
 a**b
 ");
 Console.WriteLine("a**b={0}", product);

2) Như bạn có thể thấy từ ví dụ trên, IronPython thực sự chuyển đổi sang các lớp BCL nơi nó có thể. kết quả của tập lệnh là một System.Numerics.BigInteger chứ không phải là PyObject

3) dynamicTừ khóa trong C # được tạo cho các tình huống xen kẽ khi bạn không có loại tĩnh:

    dynamic example = engine.Execute(@"
class Example(object):
  def __init__(self):
    self.breakfast = ['ham','spam','eggs']
    self.lunch = 'BRAIINNNZ'
Example() # return an example");

    foreach(string item in example.breakfast)
        Console.WriteLine(item);
    Console.WriteLine(example.lunch);

+1 cho ví dụ điển hình cho thấy việc chạy trăn sắt dễ dàng như thế nào .... mặc dù đó không phải là OP đã yêu cầu ;-)
tobsen

0

IronPython và C # kết hợp tốt với nhau, IronPython có thể được thêm vào C # để tăng hiệu suất. Vì vậy, nếu trò chơi viết của bạn thì các cuộc gọi Python trong C # là một lợi thế. Bản thân Python không thể sử dụng XNA nhưng có thể sử dụng Directx một cái gì đó mà C # không thể làm trực tiếp.


1
FWIW, Python cũng không thể sử dụng DirectX "trực tiếp" - nó tương tác với nó thông qua các trình bao bọc dựa trên thực tế rằng D3D là API C / COM. Đây chính xác là cách bạn có thể truy cập DirectX từ C #.
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.