Ngôn ngữ kịch bản nào bạn muốn giới thiệu cho một dự án trò chơi C ++? [đóng cửa]


14

Bằng cách viết kịch bản ở đây tôi có nghĩa là không chỉ đưa dữ liệu cấu hình vào một tập lệnh, mà là các phần kịch bản của dự án như một số phương thức lớp, kiểm tra vòng lặp trò chơi cụ thể, v.v. Điều này không chỉ để tăng tốc phát triển, mà còn cho phép người chơi thấy một số trong số này kịch bản để điều chỉnh một số khía cạnh của trò chơi.

Một số ngôn ngữ như Lua có một số trình bao bọc như luabind, nhưng khi tôi sử dụng nó trong quá khứ, nó có vấn đề vì nó không hỗ trợ xác định lại phương thức trong bối cảnh kế thừa.

Đề xuất của bạn về ngôn ngữ / trình bao bọc để sử dụng hoặc không sử dụng là gì?

Câu trả lời:


9

Trò chơi video
Lua-kịch bản Công cụ trò chơi kịch bản Lua

Tôi nghĩ rằng Lua là bức ảnh tốt nhất.

Bài viết này là về việc tích hợp Lua và C ++. Nó nói rằng:

LuaBind là một sản phẩm tuyệt vời nhưng đối với tôi nó quá phức tạp. Đối với một mã không dễ dàng để theo dõi các lớp và các đối tượng. Cũng thấy rằng tôi muốn tích hợp Lua vào một ứng dụng wxWidgets, sử dụng các mẫu là một điều không nên (bạn có thể đọc các vấn đề đa nền tảng trên trang web wxWidgets).

Có nhiều thư viện ràng buộc khác:

http://luabridge.sourceforge.net/
http://www.stackedboxes.org/~lmb/diluculum/
http://cpplua.sourceforge.net/
http://www.tecgraf.puc-rio.br/~ celes / tolua /

Trình bao bọc C ++ / Lua tốt nhất là gì?

Chỉ cần chọn và thưởng thức.


Đúng, Lua khá đơn giản và rất dễ tích hợp với C. Trên thực tế, đó là mục tiêu chính của Lua, là một ngôn ngữ nhúng.
Marco Mustapic

Cảm ơn bạn đã tham khảo trên LuaBind, có thể việc đào sâu vào các thư viện ràng buộc khác sẽ thuyết phục tôi vì đã lấy lại Lua
Frédérick Imbeault

Tuy nhiên, tôi khuyên bạn chỉ nên chạy tập lệnh của mình trong luồng chính và cung cấp bộ cấp phát nhóm cho nó nếu hiệu suất là vấn đề đáng lo ngại.
Kylotan

5

Tôi đã thích Chaiscript ; Tôi đã không sử dụng nó rất lâu, nhưng cho đến nay nó có vẻ khá chắc chắn.

Không giống như Python hay lua, nó được xây dựng từ đầu để sử dụng với C ++. Quá trình ràng buộc có vẻ sạch sẽ hơn nhiều so với luabind / vv.

Dưới đây là tóm tắt của trang web:

ChaiScript là ngôn ngữ kịch bản đầu tiên và duy nhất được thiết kế từ đầu với khả năng tương thích C ++>. Nó là một ngôn ngữ giống như chức năng nhúng, lấy cảm hứng từ ECMAScript.

ChaiScript được cấp phép theo giấy phép BSD.


Hấp dẫn. Còn kiểm tra hiệu suất thì sao? Có bất kỳ so sánh ChaiScript / Lua / Python?
topright

Khá thú vị, có bất kỳ lỗi / lỗi / hiệu suất nào mà bạn đã trải qua cho đến nay?
Frédérick Imbeault

Tôi chưa thấy bất kỳ điểm chuẩn nào, nhưng tôi chưa có bất kỳ vấn đề nào về hiệu năng ... điểm chính của tôi cho đến nay là nó không chuyển đổi giữa các kiểu số một cách ngầm định (vì vậy bạn sẽ gặp lỗi nếu bạn chuyển một int sang một chức năng lấy một float, vv).
Riley Adams

1
Chỉ là một FYI, vì nhận xét này đã được 6 năm rồi - ChaiScript hiện không thực hiện chuyển đổi số.
trái

5

Tôi muốn giới thiệu Lua .
Python cũng rất phổ biến. Nhiều công cụ trò chơi đặc trưng (ví dụ Blender) sử dụng nó.
C ++ :: Boost có một thư viện để làm việc với Python.
Tôi đã đọc về Squirrel , nhưng không sử dụng nó.

Bạn có thể đọc tổng quan về Game Engine này . Có một Scriptingcột. Bạn có thể thấy rằng Lua và Python là ngôn ngữ kịch bản phổ biến nhất.


Về Boost, tôi nghĩ có lẽ đó là một thư viện khổng lồ và nhiều thứ không hoàn toàn hữu ích trong tất cả các dự án. Trên thực tế, luabind sử dụng Boost rất nhiều và đó là một trong những điều tôi không thích.
Frédérick Imbeault

1
Tôi sẽ nói đó là một lợi thế. Bạn có nhiều giải pháp ra khỏi hộp. Và dự án của bạn chỉ có 1 phụ thuộc bên ngoài - Boost. Không có nhiều thư viện nhỏ (sử dụng các kiểu, cách tiếp cận, giấy phép khác nhau và lần lượt có thể có các phụ thuộc ngầm bên ngoài) khó cập nhật, đồng bộ hóa với mã của bạn và duy trì.
topright

1
Và bạn chỉ bao gồm những thư viện Boost (tiêu đề) mà bạn cần. Boost là rất lớn, nhưng bạn không quan tâm cho đến khi bạn cần cái này hay cái kia.
topright

Và về python và Lua, có một số hàm bao cho C ++ cho phép bạn xác định lại các phương thức lớp, tạo các phương thức mới, v.v.? Và tính năng này có thể được kiểm soát từ mã C ++ (để bảo mật) không? Như tôi đã nói, LuaBind làm những điều này nhưng thất bại trong bối cảnh kế thừa, điều khá phổ biến trong một dự án trò chơi. Các phương pháp tôi muốn xác định lại là ví dụ, kiểm tra vòng lặp trò chơi cụ thể, cập nhật phương thức của các thực thể như người chơi, phương pháp cập nhật của chính thế giới trò chơi, v.v.
Frédérick Imbeault

Lua không có các lớp và các đối tượng, nhưng chúng có thể được mô phỏng bằng các bảng. Đây là một thư viện Lua cho OOP mà tôi thích: love2d.org/wiki/MiddleClass .
topright

4

Tại sao không xây dựng của riêng bạn?

Nếu bạn có thời gian, kiên nhẫn và sẵn sàng học hỏi - bạn luôn có thể thử phát triển công cụ viết kịch bản của riêng mình với tất cả các tính năng và cú pháp mà bạn cần.

Ưu điểm

  1. Bạn sẽ tìm hiểu về một phần thú vị của Khoa học Máy tính.
  2. Bằng cách phát triển một công cụ kịch bản 'trong nhà', nó cho phép bạn kiểm soát hoàn toàn từ đầu đến cuối bằng cách cho phép bạn điều chỉnh động cơ theo chính xác những gì bạn cần.
  3. Nếu bạn cần thực hiện bất kỳ thay đổi nào sau này, họ có thể dễ dàng biết được phần nào trong và ngoài cơ sở mã của riêng bạn, thay vì học trong và ngoài của ai đó.
  4. Bạn sẽ không phải lo lắng về việc giữ cho động cơ của bạn cập nhật với các bản vá của người khác.

Nhược điểm

  1. Thời gian. Không nhiều người có nó. Nếu bạn cần một cái gì đó NGAY BÂY GIỜ, hãy thử một công cụ đã có sẵn (như một trong những công cụ đã được đề xuất).

  2. Tốc độ. Rất nhiều công cụ kịch bản hiện có rất nhanh - một giải pháp tùy chỉnh có thể không nhanh như vậy.

  3. Kích thước nhóm. Rất nhiều công cụ viết kịch bản hiện có có các nhóm lớn hơn làm việc trên cơ sở mã, cho dù đó là các nhóm tư nhân hay tình nguyện viên toàn cầu, có một điều cần nói về mã được kiểm tra và kiểm tra lại bởi nhiều người khác.

  4. Một công cụ kịch bản đòi hỏi một số lượng kế hoạch ban đầu nhất định để đạt được hiệu quả. Có rất nhiều nền tảng cần phải được thực hiện cũng như có thể không phải làm với công cụ kịch bản thực tế.

  5. Cơ sở người chơi / nhà phát triển của bạn sẽ phải làm quen với công cụ viết kịch bản của bạn. Điều này có thể không phải là một vấn đề nếu cú ​​pháp và chức năng gần giống như hầu hết các công cụ kịch bản hiện đại, nhưng chỉ cần lưu ý về điều đó.

Đây không phải là một danh sách đầy đủ. Nếu bạn thấy mình phải thực hiện một số lượng lớn các thay đổi ở mặt sau của ngôn ngữ kịch bản lệnh hiện có để có được chức năng bạn muốn, IMO có lẽ bạn nên tìm một công cụ khác phù hợp hơn với yêu cầu của bạn hoặc chỉ xây dựng riêng bạn.

Tôi nhận ra mọi người thích thú với việc "lười biếng" và "không phát minh lại bánh xe" nhưng tôi nghĩ có điều gì đó để nói về việc học cách thực hiện công cụ này. Và một triển khai cụ thể có lẽ sẽ tốt hơn cho dự án của bạn hơn là triển khai chung.

"Tạo hệ thống tập lệnh trong C ++" dường như là bài viết ưa thích mà mọi người chia sẻ khi thảo luận về chủ đề này: http://www.gamedev.net/reference/list.asp?cargetid=76


2
Tôi đồng ý điều này có một lợi thế giáo dục đặc biệt. Tuy nhiên, nó đòi hỏi một số kiến ​​thức và kỹ năng về lý thuyết ngôn ngữ lập trình (mà rất nhiều người NGHINK họ có) và một số kiến ​​thức về lý thuyết tính toán. Nếu đây câu trả lời vỉa hấp dẫn với ai đó, tôi sẽ đề nghị luận án hai cuốn sách: amazon.com/gp/product/0136073476/ref=oss_productamazon.com/gp/product/0534950973/ref=oss_product
Frederick Imbeault

Bạn sẽ ngạc nhiên khi bạn có thể đi bao xa mà không có kiến ​​thức thực sự về những điều đó. Rất nhiều MUD có ngôn ngữ kịch bản ít hơn một danh sách các câu lệnh với một số hack để kích hoạt các điều kiện, và chúng có thể đạt được rất nhiều chỉ với điều đó.
Kylotan

Đã từng trải qua rồi. Đã học rất nhiều về phân tích cú pháp, thiết kế trình biên dịch, máy bytecode, tất cả những thứ đó. Lần tới có lẽ tôi sẽ sử dụng Lua và đánh giá cao nó hơn nữa. :)
Kaz Dragon

2

Tôi đã thử Lua, Python, Scheme và Squirrel. Lua làm việc tốt nhất; nó có một cộng đồng lớn hơn và hỗ trợ tốt hơn Squirrel, và các đặc tính hiệu suất và bộ nhớ tốt hơn nhiều so với Python. Scheme cũng hoạt động rất tốt và có một thông dịch viên rất nhỏ, nhưng thật khó để các nhà thiết kế quấn đầu quanh một ngôn ngữ chức năng.


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.