Câu trả lời:
Các tập lệnh thường được biên dịch vào thời gian chạy , trong khi ngôn ngữ máy chủ sẽ được biên dịch vào thời gian biên dịch. Điều này có nghĩa là chúng ta không cần biên dịch lại nếu tập lệnh thay đổi. Việc biên dịch lại một trò chơi đầy đủ có thể mất vài phút đến vài giờ, điều này ngụ ý một năng suất lớn.
Thông thường, mã quan trọng hoặc mã phụ trợ sẽ không được viết kịch bản. Mã này nên chạy nhanh và thường quản lý bộ nhớ là rất quan trọng.
Trong các trò chơi, logic và cấu hình trò chơi thường được chứa trong các tệp script. Các kịch bản này có thể dễ dàng được cập nhật bởi những người không lập trình (như nhà thiết kế) để điều chỉnh lối chơi. Ngôn ngữ script rất dễ dàng và hành động theo cách tha thứ cho mục đích đó.
Thông thường, một ngôn ngữ kịch bản cũng được sử dụng để thực hiện kịch bản theo thời gian thực . Điều này có ích để điều chỉnh một số yếu tố chơi trò chơi hoặc thậm chí để gỡ lỗi. Nhiều trò chơi cung cấp một giao diện điều khiển cho mục đích này (chủ yếu là trong nhà).
Rất có khả năng bạn tạo một trò chơi bằng cách sử dụng một công cụ trò chơi hiện có, chỉ bằng cách viết kịch bản. Các vì vậy lớp công cụ trò chơi được tách hoàn toàn khỏi lớp trò chơi logic . Các công cụ hiện đại thường có thể được sử dụng để tạo các game FPS hoặc RTS dễ dàng như thế này, nhưng không thể áp dụng cho bất kỳ thể loại nào. Một MMO có thể sẽ yêu cầu một loại động cơ khác.
Vì vậy, dòng dưới cùng là tách rời. Các lợi ích được liệt kê ở trên thường vượt trội so với công việc làm thêm để tạo hoặc tích hợp ngôn ngữ kịch bản.
Bạn đã hỏi sai câu hỏi. Câu hỏi thực sự, tôi nghĩ, là tại sao chúng ta đưa ra các ngôn ngữ "không viết kịch bản" như C, C ++, Java, v.v. Và câu trả lời là một lý do: hiệu suất. (Và có thể là quán tính, nhưng quán tính đó là do hiệu năng và bất kỳ ai có thể viết C / C ++ / Java tốt đều có thể viết ít nhất là Ruby / Python / Lua / JavaScript.
Chúng tôi sử dụng các ngôn ngữ "scripting" (có nghĩa là, mức độ rất cao, rác được thu thập và thường là một số hình thức gõ lỏng hơn và biên dịch động) bởi vì chúng thường là ngôn ngữ dễ dàng hơn cho bất kỳ ai - bao gồm các lập trình viên - để viết mã. những thứ ngu ngốc như nhớ để giải phóng sau khi bạn malloc hoặc đảm bảo mã của bạn là ngoại lệ an toàn hoặc ghi nhớ để làm cho tất cả các hàm hủy của bạn trở nên ảo. Nếu máy tính của chúng tôi cực kỳ nhanh, chúng tôi sẽ sử dụng ngôn ngữ "scripting" cho mọi thứ.
Các ngôn ngữ kịch bản cho logic trò chơi là một ví dụ rất hay về mẫu kiến trúc phần mềm Alternate Hard and Soft Layer . Có một cuộc thảo luận tốt trên trang web đó (và những người khác tôi chắc chắn) về lợi ích của việc đó.
Thay đổi tập lệnh rất dễ triển khai. Ví dụ: bạn có thể giữ các tập lệnh trong cơ sở dữ liệu, điều đó có nghĩa là thay vì triển khai lại nhị phân đầy đủ và có thể khởi động lại dịch vụ, bạn chỉ cần đưa ra một câu lệnh SQL UPDATE duy nhất, có thể theo sau là tín hiệu cho dịch vụ đang chạy của bạn để tải lại tập lệnh.
Ngoài ra, các ngôn ngữ tập lệnh thường đơn giản dễ hiểu và dễ lập trình, do đó bạn không cần các nhà phát triển 'khó tính' (những người liên quan đến Quản lý bộ nhớ / Con trỏ và tối ưu hóa mức cpu) cho phần lớn mã (nếu là một game nhập vai lớn, các tập lệnh cho AI, Phép thuật, Hiệu ứng vật phẩm và thế giới thường lớn hơn mã động cơ). Các ngôn ngữ script cho phép tập trung nhiều hơn vào 'cái gì' hơn là 'làm thế nào' do Bộ sưu tập rác (trong trường hợp của Lua) và mức độ trừu tượng cao hơn.
Một tình huống trong đó các đoạn mã rất hữu ích là khi chúng ta muốn công cụ của chúng ta có thể mở rộng bằng các plugin / addons. Các tiện ích mở rộng này được tạo ra trong nhiều trường hợp bởi những người không chuyên nghiệp (như những người chơi và người đam mê tiên tiến). Kịch bản an toàn hơn và dễ dàng hơn cho mục đích này. Bằng cách sử dụng tập lệnh, họ không cần sử dụng trình biên dịch và không cần biết về con trỏ ...
Một ví dụ tuyệt vời về điều này là trò chơi World of Warcraft. Nó có hàng ngàn addon được tạo bởi cộng đồng. Các addon này được viết bằng LUA + XML.