Lợi ích duy nhất hiện tại tôi có thể nghĩ đến là bạn có thể thực hiện một số cập nhật mã hóa, thông qua Lua, mà không phải biên dịch lại.
Đừng giảm giá tiện ích này một cách dễ dàng. Bạn sẽ không bao giờ hiểu bạn sẽ làm việc hiệu quả như thế nào cho đến khi bạn bỏ đi bước biên dịch lại.
Các "chảy" là một khái niệm tâm lý khá tốt-hiểu khi nói đến công việc. Dòng chảy là cảm giác mà bạn có được khi bạn tập trung vào một hoạt động, khi bạn phân tích và giải quyết vấn đề gần như không cần suy nghĩ, v.v. Bạn làm việc hiệu quả nhất khi bạn "chảy".
Biên dịch lần vít tất cả lên. Thật khó để duy trì dòng chảy nếu bạn thậm chí có một biên dịch 10 giây giữa khi thử nghiệm một cái gì đó.
Khi bạn đang phát triển trò chơi, những gì bạn thường có là một "vòng lặp chặt chẽ". Bạn có một ý tưởng, bạn viết mã một bài kiểm tra để xem nó có hoạt động không, và sau đó bạn thử nó. Nếu nó không hoạt động, bạn sửa đổi nó và thử lại. Thời gian "kiểm tra mã" là rất quan trọng để duy trì lưu lượng. Làm cho nó nhỏ nhất có thể là rất quan trọng.
Những gì Lua (hoặc bất kỳ ngôn ngữ kịch bản nhúng nào) cho phép bạn làm là kiểm tra các thay đổi, không chỉ là không "biên dịch", mà còn sống trong trò chơi . Tùy thuộc vào cách bạn xây dựng trò chơi của mình, bạn có thể chạy một lệnh sẽ khởi động lại trò chơi với các tập lệnh mới mà không phải dừng và tải lại dữ liệu, v.v. Bạn không chỉ không phải biên dịch lại mà còn không phải chạy lại.
Khả năng để làm điều này, với sự hỗ trợ động cơ thích hợp, có thể tăng năng suất đáng kể.
Một lợi ích lớn khác cho kịch bản là khả năng không quan tâm. Nếu bạn đã dành một thời gian dài để viết C ++, bạn sẽ ngạc nhiên về số lượng thời gian bạn dành cho minutae. Nơi bộ nhớ bị xóa. Nơi này được giải phóng. Ngay cả khi bạn đang sử dụng shared_ptr
ở mọi nơi, chỉ cần hành động gõ vào tất cả các tên loại biến đó sẽ làm bạn chậm lại.
Trong một ngôn ngữ kịch bản được gõ động, bạn không cần phải quan tâm. Phạm vi là đơn giản. Chức năng là các đối tượng hạng nhất; bạn không phải tự xây dựng functor. Nó chỉ là quá dễ dàng để làm một số điều.
Bây giờ điều đó có tiêu cực, nếu bạn không phải là một lập trình viên có kỷ luật. Rất dễ sử dụng toàn cầu trong Lua (mặc dù có nhiều cách để ngăn chặn điều đó). Không quan tâm có nghĩa là bạn có thể rất cẩu thả khi bạn viết mã.
Nhưng sau đó, một lần nữa, rất cẩu thả có thể có lợi thế .
Một ưu điểm khác của Lua là nó tạo ra một ngôn ngữ mô tả dữ liệu đẹp. Giống như JSON chỉ là một tệp JavaScript xây dựng và trả về một mảng / bảng, bạn có thể tạo các tập lệnh Lua trả về các bảng.
Điều này rất hữu ích cho các tập tin cấu hình; Định dạng bảng của Lua tốt hơn nhiều so với định dạng .ini. Định dạng vẫn khá sạch sẽ, nhỏ gọn và có thể mở rộng.
Ồ, và nó vẫn là một kịch bản Lua, vì vậy nó có thể thực hiện logic thực tế. Nhược điểm của nó là ... tốt, đó là một kịch bản Lua, vì vậy nó có thể thực hiện logic thực tế . Điều đó có thể là thảm họa trong trò chơi, vì người dùng có khả năng bắt đầu làm hỏng mọi thứ.
Nhưng thực sự, điều này dễ dàng được xử lý. Lua được thiết kế để nhúng, điều đó có nghĩa là sự cô lập thực sự khá dễ dàng. Thật vậy, một trạng thái Lua tươi không cung cấp gì theo mặc định; bạn phải thực sự làm một cái gì đó để lộ ngay cả những thư viện Lua cơ bản nhất. Truy cập tệp, truy cập trạng thái trò chơi, v.v., tất cả đều chọn tham gia, không chọn không tham gia. Và mỗi bang Lua tách biệt với nhau. Trạng thái Lua bạn sử dụng cho các tập lệnh AI không phải là trạng thái Lua bạn sử dụng cho các tệp cấu hình.
Tôi thực sự có một số mã cho phép bạn đăng ký nhiều thư viện chuẩn Lua, nhưng đi qua và xóa tất cả tệp IO. Cuối cùng, điều tồi tệ nhất mà tệp cấu hình dựa trên tập lệnh Lua có thể làm là khiến trò chơi của bạn bị sập ngay lập tức khi chạy nó, bằng cách chạy nó ra khỏi bộ nhớ. Và vì bạn không chia sẻ các tệp cấu hình này theo cách thủ công, điều đó sẽ không thú vị cho tin tặc.
Tôi muốn nói rằng nhược điểm lớn nhất của bất kỳ ngôn ngữ kịch bản nào là gỡ lỗi. Hầu hết các ngôn ngữ script không có trình gỡ lỗi và Lua cũng không khác. Lua có tất cả các công cụ mà người ta sẽ cần để xây dựng các công cụ gỡ lỗi. Nhưng nó không thực sự có trình gỡ lỗi tích hợp. Bạn phải đặt một cái lại với nhau. Và điều đó sẽ đòi hỏi một mức độ hợp lý của công việc.
Hoặc bạn có thể thực hiện do "gỡ lỗi printf". Nó thực sự phụ thuộc vào số lượng mã Lua bạn viết.