Khi nào tôi sẽ sử dụng các tập lệnh của Wikipedia và tập lệnh script trong một trò chơi, trái ngược với ngôn ngữ cốt lõi?


13

Các thuật ngữ tập lệnh và tập lệnh dường như được sử dụng thay thế cho nhau trên Sàn giao dịch phát triển trò chơi, nhưng ngoài việc đọc câu hỏi về lựa chọn ngôn ngữ kịch bản, tôi không hiểu mối quan hệ giữa tập lệnh và tập lệnh và ngôn ngữ cốt lõi. Kịch bản thường làm gì, khi nào nó sẽ được sử dụng và các tập lệnh trong một số ngữ cảnh (như được xác định bởi các lập trình viên trò chơi) khác với ngôn ngữ kịch bản?



@Tetrad Cảm ơn bạn đã liên kết, nhưng tôi nghĩ rằng câu hỏi khác thảo luận nhiều hơn về câu hỏi kiến ​​trúc cơ bản của "tại sao", trái ngược với những gì và khi nào.

2
"Cái gì" và "khi nào" sẽ cụ thể cho các trường hợp sử dụng của bạn. "Tại sao" cung cấp cho bạn khả năng ra quyết định. Không có chi tiết cụ thể, câu hỏi này là một bản dupe (trong mắt tôi).
Tetrad

Câu trả lời:


15

Các kịch bản được viết cho một ngôn ngữ kịch bản. Mọi người có thể sử dụng các từ trong câu tiếng lóng để hiểu được sự nhầm lẫn mà bạn đang đề cập nhưng hỏi bất kỳ ai về định nghĩa của Script, Scripting và Scripting Language và bạn sẽ nhận được một cái gì đó như: Scripting là hành động viết Script bằng Ngôn ngữ Scripting.

Khi bạn nhúng ngôn ngữ kịch bản vào công cụ trò chơi hoặc ngôn ngữ cốt lõi như bạn đang đề cập, bạn sẽ không chỉ hiển thị các đối tượng trong công cụ trò chơi mà còn cho phép viết logic cho công cụ trò chơi. Một điều lưu ý khác là điều này biến trò chơi của bạn thành một loại máy ảo, vì các ngôn ngữ kịch bản hiếm khi được biên dịch thành ngôn ngữ máy và thay vào đó được đưa vào một dạng mã byte và được giải thích trong thời gian chạy bởi công cụ trò chơi của bạn.

Điều này có một số lợi ích to lớn cho nhóm phát triển, một vài trong số đó bạn có thể tìm thấy được liệt kê tiếp theo:

  • Ngôn ngữ kịch bản thường được quản lý bộ nhớ, do đó bạn không phải lo lắng về việc phân bổ
  • Chúng thường là một ngôn ngữ được gõ lỏng lẻo loại bỏ sự cần thiết để đảm bảo bạn đang sử dụng loại biến cho những gì bạn đang làm, chỉ cần tạo một biến và đi với nó.
  • Bản thân các ngôn ngữ thường rất đơn giản trong khi cung cấp khá nhiều quyền kiểm soát cho những người không phải là lập trình viên
  • Các kịch bản thay đổi không yêu cầu công cụ cốt lõi được biên dịch lại.
  • Scripting vs Coding thường làm giảm thời gian cần thiết để điều chỉnh logic trò chơi rất lặp đi lặp lại.
  • Tùy thuộc vào thiết kế và ngôn ngữ, bạn có thể thường xuyên tải lại tập lệnh trong khi trò chơi đang chạy để điều chỉnh / kiểm tra dễ dàng hơn.

Tôi chắc chắn rằng danh sách có thể tiếp tục và tôi chắc chắn, đặc biệt là khi bạn tham gia vào các loại trò chơi chuyên biệt và cách kịch bản có thể giúp xác định quy tắc hình thành nhóm để di chuyển các nhóm đơn vị trong RTS hoặc cách bạn có thể tạo logic của UI trong ngôn ngữ kịch bản để cung cấp giao diện người dùng mở rộng cho người dùng cuối của bạn và những người tương tự.


9

Sử dụng kịch bản có nhiều lợi thế so với "ngôn ngữ cốt lõi". Một số trong số này bao gồm:

  • Chuyển (thêm) nội dung từ nhà phát triển cốt lõi sang nghệ sĩ, giải phóng nhà phát triển cốt lõi sang nhiệm vụ động cơ khỏi nhiệm vụ chơi trò chơi
  • Các tập lệnh có xu hướng được hộp cát, không thể làm bất cứ điều gì thực sự nguy hiểm trong đó
  • Sửa đổi tập lệnh không yêu cầu biên dịch lại và thực hiện lại trò chơi

Đối với dấu đầu dòng đầu tiên của bạn, bạn có thể cung cấp một ví dụ về một phần chức năng sẽ được chuyển sang một tập lệnh để các nghệ sĩ chỉnh sửa không?

Ví dụ @Brian Reindel sẽ là chỉ số vũ khí / NPC, AI và bản đồ / cấp độ.
Hackworth

1
@Hackworth Bạn đang nói rằng lập trình AI được thực hiện bởi các nghệ sĩ? Kịch bản sẽ được thực hiện bởi một Nghệ sĩ sẽ bao gồm các kịch bản cho hoạt hình và hiển thị các đối tượng 3D và như vậy.
KRB

3
Nghệ sĩ không nên được thực hiện để lập trình bất cứ điều gì. Bạn tách công cụ khỏi logic trò chơi vì mục đích mô đun hóa , không phải vì mục đích giảm tải phát triển cho những người có thế mạnh ở nơi khác.
Jon Purdy

1
@James tốt, vấn đề là: họ làm chương trình "nhẹ", nhưng họ đang ở trong trại "nội dung". Vì vậy, thuật ngữ là khó khăn. =)
Jari Komppa

6

Một tập lệnh thường là một đoạn mã chạy bên ngoài công cụ cốt lõi của bạn. Nó thường được chứa trong các tệp văn bản bất cứ nơi nào bạn muốn giữ chúng. Sau đó, nó thường được tải bởi công cụ, phân tích cú pháp và thực thi trong thời gian chạy.

Điều thường xảy ra là bất cứ ngôn ngữ nào bạn sử dụng (ví dụ Lua, Angelscript), ngôn ngữ này thường có một số phương tiện cho phép lập trình viên động cơ thể hiện các chức năng của động cơ hoặc thậm chí toàn bộ các lớp đối với "công cụ kịch bản lệnh" hiện đang chạy .

Ví dụ: (ví dụ hoàn toàn ngu ngốc, nhưng chỉ để hiểu rõ hơn) mã trò chơi của bạn có thể có chức năng công khai sinh ra zombie ở đâu đó:

void SpawnZombie(int x, int y, int hp /* whatever else */)
{
   //...
}

Ngôn ngữ kịch bản mà bạn sử dụng bây giờ cho phép bạn hiển thị chức năng này cho trình phân tích cú pháp kịch bản đang chạy. Điều này có nghĩa là bạn có thể mở tệp văn bản, viết "SpawnZombie (200.300.1337)" và khi công cụ của bạn thực thi mã, Zombie sẽ sinh ra tại vị trí đó.

Các câu trả lời khác đã liệt kê một vài ví dụ hay về cách sử dụng điển hình này, nhưng chúng bỏ qua một điểm mà tôi thấy rất quan trọng:

Các loại kịch bản này làm cho nó rất dễ dàng để gỡ lỗi hoặc kiểm tra trò chơi trong thời gian chạy.

Giả sử bạn muốn tìm ra cách hoàn hảo để đặt zombie vào bản đồ để nó có hiệu ứng sợ hãi tối đa đối với người chơi khi họ phát hiện ra nó. Nếu không có hỗ trợ kịch bản, bạn phải thoát khỏi ứng dụng, thay đổi một số số ma thuật trong mã, biên dịch lại và kiểm tra nó.

Với hỗ trợ kịch bản (cung cấp cho bạn một số phương pháp nhập văn bản trong thời gian chạy, ví dụ: bảng điều khiển gỡ lỗi), bạn chỉ cần nhập "SpawnZombie (333,444,555)" và xem nó trông như thế nào.

Theo cách tương tự, bạn có thể sinh ra vũ khí, xe cộ, tải các bản đồ khác nhau, thay đổi giá trị của một số thứ trong trò chơi, v.v., đánh bại kẻ thù vì bạn không muốn lãng phí thời gian để đến phần cần phải có thử nghiệm, vv

Điều này sẽ giúp bạn tiết kiệm hàng tấn lần trong các trò chơi phức tạp hơn.


2

1) Kịch bản thường dễ sửa đổi hơn nhiều so với mã.

2) Các tập lệnh thường có thể sửa đổi trường. Điều này cho phép mod trò chơi.


Vì vậy, có công bằng không khi nói rằng các tập lệnh của bạn sau đó được xây dựng với các ngôn ngữ không được biên dịch để có thể chỉnh sửa bởi bất kỳ ai?

@Brian Reindel: Nói chung, vâng.
Loren Pechtel

2

Hầu hết các ngôn ngữ kịch bản có nhiều biểu cảm hơn ngôn ngữ trong công cụ cốt lõi. Thông thường, công cụ này được viết bằng ngôn ngữ tương đối thấp (ví dụ: C ++) vì lý do hiệu suất, nhưng mã trò chơi không cần phải là hiệu suất và vì vậy các ưu tiên chuyển sang khả năng thể hiện chức năng một cách dễ dàng.

Ví dụ, gõ động so với tĩnh. Một ví dụ khác: thu gom rác so với quản lý bộ nhớ thủ công.


0

Viết kịch bản cho phép bạn viết logic ở mức cao hơn. Nói cách khác, bạn viết ít mã hơn với nhiều chức năng hơn.

Vì vậy, một ví dụ, sau đây cho thấy sự khác biệt giữa viết một cái gì đó bằng mã và viết nó bằng ngôn ngữ kịch bản.

Mã trò chơi

Update Loop
{
    if (CarExplodeAnimation.FinalFrame == true)
    {
        SceneGraph.Remove(Car);
        Message("You have destroyed the car.";
    }
    else
    {
        CarExplodeAnimation.AdvanceToNextFrame();
    }

}

Mã script

PlayAnimation(ShipExplode)  // blocks until animation completes
Message("You have destoryed the car.")

Xem bao nhiêu mã hóa mà nhà thiết kế phải làm nếu bạn sử dụng ngôn ngữ kịch bản?

Lý do là vì mã trò chơi, bạn phải chia một sự kiện thành nhiều khung và viết mã từ phối cảnh nhiều khung. Mặt khác, kịch bản cho phép bạn nghĩ về nhiều sự kiện khung chỉ là một dòng mã duy nhất, bởi vì tất cả các mã bổ sung được trừu tượng hóa đằng sau một hàm script.

Bạn có thể hỏi, nhưng chức năng đó không thể được viết bằng mã trò chơi sao? Vâng, vâng, nhưng điều đó có nghĩa là các nhà thiết kế sẽ phải mở mã nguồn của công cụ trò chơi và viết tất cả các mã trong đó, và bạn không muốn các nhà thiết kế của bạn lướt qua mã nguồn của công cụ trò chơi (họ có thể vô tình thay đổi một số mã khác và toàn bộ sự cố).

Thay vào đó, bạn muốn nhà thiết kế của mình thực hiện một cái gì đó như thế này: Nhấp chuột phải vào ô tô trong Trình chỉnh sửa bản đồ, nhấp vào Chèn tập lệnh, nhập mã tập lệnh. Không có sự lộn xộn với các mã nguồn công cụ trò chơi quan trọ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.