Làm thế nào để bạn thêm một ngôn ngữ kịch bản cho một trò chơi?


25

Hãy nói rằng tôi có một trò chơi được viết bằng C ++. Nhưng tôi muốn thêm một số chức năng sửa đổi hoặc kịch bản cho nó. Làm thế nào một người đi về việc thêm một chức năng kịch bản cho trò chơi của bạn?


Ngôn ngữ phổ biến nhất: Xem Lua (Ngôn ngữ lập trình)Lua (Lập trình langugae) - Ví dụ API C : IBM có một bài viết tuyệt vời về điều này: Nhúng LUA
Tamara Wijsman

Các bước chính xác phụ thuộc ồ ạt vào ngôn ngữ bạn muốn thêm. Hãy xem gamedev.stackexchange.com/questions/11/
Khăn

Câu trả lời:


27

Trước hết, bạn nên quyết định phần nào trong trò chơi của bạn được viết kịch bản. Một lựa chọn là có một trò chơi theo kịch bản hoàn chỉnh theo nghĩa là trong khi các hoạt động phụ trợ thời gian quan trọng được mã hóa trong C ++, tất cả logic trò chơi đều bằng ngôn ngữ kịch bản. Các nhà thiết kế sử dụng phụ trợ như một API được gọi từ ngôn ngữ kịch bản cấp cao. Ở một thái cực khác, bạn có thể có một vài vị trí cụ thể sử dụng tập lệnh, như giao diện người dùng hoặc các đoạn mã, với phần lớn mã trò chơi vẫn ở C ++. Có những lợi thế cho mỗi cách tiếp cận (tốc độ, tính linh hoạt, thời gian biên dịch, phạm vi trò chơi, v.v.), nhưng bạn cần phải quyết định trước.

Khi bạn biết cách bạn muốn sử dụng tập lệnh, bây giờ bạn cần quyết định xem bạn sẽ sử dụng ngôn ngữ tập lệnh hiện có hay ngôn ngữ dành riêng cho tên miền của bạn . Ngày nay có nhiều ngôn ngữ kịch bản để lựa chọn với các mục tiêu thiết kế và đối tượng mục tiêu khác nhau, vì vậy tôi không chắc liệu nó có đáng để tạo ra ngôn ngữ của riêng bạn nữa hay không. Nếu bạn quyết định tự thực hiện, đây là một số tài nguyên:

Lua là một ngôn ngữ kịch bản nhẹ phổ biến và dễ dàng để nhúng. Nó sử dụng một ngăn xếp để giao tiếp giữa máy chủ và ngôn ngữ nhúng và nó đã được sử dụng thành công trong nhiều trò chơi chuyên nghiệp . Sol2 đơn giản hóa quá trình ràng buộc Lua và C ++. Nếu bạn không thích cú pháp của Lua, Moonscript là ngôn ngữ biên dịch thành Lua và thêm một bộ tính năng hay.

Các tùy chọn khác bao gồm AngelCode , cho phép bạn gọi trực tiếp các hàm C và C ++. PythonRuby phức tạp hơn một chút để nhúng, nhưng rất dễ chịu khi lập trình. Nếu bạn muốn nhúng Python thì hãy xem Boost.Python . Một ý tưởng khác là nhúng JavaScript để tận dụng các công cụ tạo kịch bản nhanh được phát triển cho các trình duyệt (xem V8SpiderMonkey ).


2
Tôi đã triển khai một ngôn ngữ kịch bản cho dự án trò chơi hiện tại của mình và lợi thế chính là kiểm soát hoàn toàn các nguyên thủy ngôn ngữ. Các giải pháp kịch bản dựng sẵn là chung chung và bạn có thể không cần tất cả các tính năng mà chúng cung cấp. Bạn tuyệt đối không nên nghĩ về việc tạo ra ngôn ngữ của riêng mình trừ khi bạn chắc chắn rằng bạn có thể tạo ra thứ gì đó tốt hơn cho trò chơi của mình hơn là một giải pháp hiện có.
Jon Purdy

Cá nhân tôi thích Guile , nó có khả năng tích hợp tuyệt vời với C. Chỉ có vấn đề là tốc độ, nhưng với bản phát hành 2.0 trong vài tháng tới cũng sẽ cải thiện.
Joe D

Câu trả lời tuyệt vời. Đoạn đầu tiên có thể được tóm tắt là "nhà phát triển trò chơi tạo API được sử dụng cho nội dung".
tro999

Thuật ngữ chung cho các ngôn ngữ tùy chỉnh (tập lệnh hoặc cách khác) là DSL, có thể giúp biết nếu bạn muốn đọc lên.
Patrick Hughes

2

Tôi đã viết một bài về việc nhúng tập lệnh GameMonkey vào một trò chơi bằng DragonFire SDK tại đây .

Về cơ bản, ý tưởng là đưa các hàm C \ C ++ của bạn sang ngôn ngữ kịch bản lệnh đã chọn và sử dụng chúng từ tập lệnh của bạn. Trong hướng dẫn của tôi, tôi đã trưng ra 2 chức năng từ DragonFire SDK. Khi bắt đầu trò chơi, tôi gọi hàm onStart từ tập lệnh và khi cập nhật, tôi gọi hàm onTimer từ tập lệnh.

Mong rằng sẽ giúp!


1
Tôi cũng đã tải lên một video demo tại đây: bit.ly/dnCkar
astk
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.