Tôi nên chọn ngôn ngữ kịch bản nào cho trò chơi của mình? [đóng cửa]


53

Trong trường hợp nào là ngôn ngữ kịch bản tốt hơn so với những ngôn ngữ khác?

Tất cả các câu trả lời đều được đánh giá cao, vui lòng cung cấp mô tả và mô tả trong trường hợp ngôn ngữ vượt trội.

(Hãy nhớ rằng, một ngôn ngữ cho mỗi câu trả lời)

Câu trả lời:


39

Lua được sử dụng rộng rãi trong ngành công nghiệp game . Từ các trò chơi độc lập ( Aquaria ) đến các tựa game AAA (Civilization).

Lý do cốt lõi? Tôi muốn nói bởi vì nó dễ học và dễ kết hợp vào các trò chơi của bạn. Nhưng điều tương tự cũng có thể được nói với Python, tôi chắc chắn. Viết kịch bản, nói chung, không khó. Tôi nghĩ lý do thực sự bạn nên đi với Lua là vì nó đã được chứng minh sẽ mang lại nhiều nguồn lực hơn cho bạn học hỏi .. Nếu bạn cảm thấy muốn thử nghiệm một thứ gì đó ngoài định mức thì tôi sẽ bắt đầu nhầm lẫn với ngôn ngữ khác.


8
Lua rất phổ biến vì nó cung cấp các tính năng "ngôn ngữ meta". Bạn có thể thực hiện các cấu trúc hướng đối tượng hoặc các hàm thủ tục thuần túy, v.v. Nó có giao diện C rất đơn giản và mang lại cho nhà phát triển động cơ rất nhiều sự linh hoạt trong chính ngôn ngữ.
Karantza

3
Tôi không tin con trăn sẽ là một lựa chọn tốt. Các ràng buộc C cho trăn được hướng nhiều hơn vào việc mở rộng trăn bằng C, sau đó nhúng trăn vào C.
SpoonMeiser

5
Từ những gì tôi đã nghe, Ĺua cũng có hiệu năng thời gian chạy tốt khi so sánh với các ngôn ngữ kịch bản lệnh khác như Python. (và nó có hỗ trợ đầy đủ cho việc đóng cửa - một tính năng thực sự tiện lợi nếu bạn hỏi tôi ..)
thbusch

2
Trên thực tế Civilization IV sử dụng python ...
Emiliano

2
@happy_emi Thật vậy, trong khi Civil V sử dụng Lua
Tobias Kienzler

22

Con sóc

Squirrel có một lịch sử thú vị. Nó được xây dựng sau khi một kiến ​​trúc sư trò chơi gặp vấn đề với bộ sưu tập rác không thể đoán trước của Lua, và mọi thứ điên rồ đều vô giá trị ngay cả khi nó không tồn tại .

Squirrel là ngôn ngữ thoát y được sử dụng trong Left 4 Dead 2 . API rất giống lua (tác giả của Squirrel thích thiết kế của Lua ).

Vì vậy, Squirrel là một ngôn ngữ tuyệt vời vì nó là Lua thế hệ thứ hai. Nó lấy những ý tưởng tốt và loại bỏ những sự lập dị gây phiền nhiễu.

Tương tự từ Lua:

  • xác chết
  • bảng và metatables
  • đánh máy năng động
  • nhiều hơn

Mới đối với sóc:

  • các lớp học
  • mảng
  • regexs thay vì cú pháp khớp của Lua.
  • Ngôn ngữ kiểu C / C ++ / Java / C # thay vì kiểu Pascal / Delphi.
  • nhiều hơn

Nhược điểm chính của sóc là nó không phải là Lua. Lua được sử dụng rộng rãi hơn nhiều. Nhưng nếu đó không phải là vấn đề thì Squirrel là một chiến thắng dễ dàng. Tuy nhiên, thường thì tính phổ biến của ngôn ngữ là tính năng hữu ích, vì vậy quyết định không quá rõ ràng.


9

Javascript Javascript từ google.

CHUYÊN NGHIỆP

Khá dễ sử dụng

Không ngừng trở nên tốt hơn

Mạnh mẽ và linh hoạt

Những người khác Như nhiều người đã đề cập, javascript là một công cụ lập trình phổ biến. Thêm nó vào các trò chơi của tôi đã mở ra nhiều người cảm thấy có khả năng hơn các ngôn ngữ khác. Nó cũng hỗ trợ một lượng lớn việc truyền và chuyển đổi để tiết kiệm công việc cho lập trình viên, cũng làm cho nó thực sự dễ sử dụng, hoạt động tốt với STL.

CON có thể:

Tài liệu có thể gây nhầm lẫn Nó thực sự không phải là tốt nhất.

Ví dụ Thường là một trang web kỳ lạ. Thiếu sự đơn giản vững chắc, nó đi qua như mức độ cao hơn nó.

Mẫu Đôi khi những thứ này bị ghét hoặc tránh.

Kích thước mã cơ sở SDK Kích thước mã được tạo có thể được xem xét phình to.


Một con đối với tôi là kích thước. Nếu bạn đang xây dựng một trò chơi đơn giản / bình thường thì công cụ v8 khá lớn và thậm chí có thể lớn hơn nhiều lần so với toàn bộ trò chơi của bạn.
Zack The Human

Đúng, nhưng là một tệp .lib độc lập có phải là một mối quan tâm lớn? Nó chỉ đơn giản là khe cắm bên cạnh SDL hoặc lua của bạn. Nếu bạn có nghĩa là kích thước mã được tạo ra, tôi đã không kiểm tra nó lớn như thế nào nhưng đó không phải là một điểm xấu.
dưới

Tôi có nghĩa là kích thước mã được tạo ra. Tôi cho rằng nó không quá lớn khi xem xét kích thước của hầu hết các trò chơi hiện nay.
Zack The Human

1
Đã kiểm tra, shell.cc mặc định với đồng hồ SVN mới nhất ở mức 1.441 MB bit.ly/9DNn8J . Mặc dù điều này có vẻ khá nặng nề, nhưng hầu hết các thư viện cần phải làm bất cứ điều gì khác (mạng, đồ họa) sẽ thêm vào đó một cách đáng kể. Một dự án phụ của tôi với v8, phoenixGL, ENet, bó tăng tốc và nhiều mã hơn trong giải pháp (như nén, mã hóa, thư viện gui, awesomium) với tốc độ 2,5 MB trong studio hình ảnh 2008 - Và được nén trong một " phát hành "xây dựng trọng lượng ở mức 861 KB. Đối với tôi, đó không phải là tất cả xấu. Trên một số nền tảng nhất định tôi có thể thấy nó thật rắc rối - mặc dù không phải vậy :)
dưới mức

1
Ive đã sử dụng V8 một vài lần trước đây trong các dự án của tôi. IMO Javascript là ngôn ngữ lý tưởng nhất để sử dụng cho kịch bản trò chơi. Bản chất dựa trên sự kiện và các đối tượng dựa trên nguyên mẫu làm cho mọi thứ trở nên dễ dàng. :)
Stephen Belanger

7

Điều đó phụ thuộc vào trò chơi và nền tảng mục tiêu của nó.

Một trò chơi chạy 100 nhân vật không phải người chơi (trò chơi RTS) có các nhu cầu khác với trò chơi chỉ chạy 2 (Street Fighter). Một trò chơi chạy trên PC có nhu cầu khác với trò chơi chạy trên bảng điều khiển.

Lua là phổ biến

GameMonkey được sử dụng bởi một số đội. Nó nhanh hơn Lua và tốt hơn trong việc xâu chuỗi.

Python đã được sử dụng trong một số trò chơi.

JavaScript là một tùy chọn có thể vì bạn có thể tải xuống các công cụ JavaScript. Có nhiều lập trình viên JavaScript hơn bất kỳ loại lập trình viên nào khác.

Ngoài ra còn có các ngôn ngữ chuyên ngành.

SCUMM đã được sử dụng trong một số trò chơi phiêu lưu và nó đặc biệt phù hợp với những trò chơi đó.


Javascript là một ý tưởng thực sự tốt. Tôi tự hỏi tại sao nó dường như không có lực kéo trong không gian này? Có ý kiến ​​gì không?
cflewis

JavaScript không có lực kéo. Đoàn kết sử dụng nó. Wolfire Games cũng vậy cho động cơ của họ.
Aps Grapsas

Hai động cơ thực sự không tạo ra lực kéo. Tôi đoán lý do chỉ có một sự phát triển gần đây là vì không có nhiều trình thông dịch JavaScript tốt trước Mono và V8. SpiderMonkey không chính xác là thứ bạn nhìn và nói "Vâng, tôi muốn trò chơi của mình nhanh và gọn và ổn định!"

4

Để hoàn thiện hơn, một tùy chọn khác là tập lệnh đơn , cho phép bạn sử dụng triển khai Novell của khung .NET để tạo tập lệnh. Đó là những gì Unity sử dụng. Đây là một trang khác về việc nhúng mono trong ứng dụng của bạn.

Khung Mono nhanh hơn hầu hết (có lẽ là tất cả?) Các ngôn ngữ kịch bản ngoài đó vì nó không được giải thích và vì có một lớp giữa trình biên dịch và tập lệnh, nó cho phép bạn lập trình bằng nhiều ngôn ngữ bao gồm C # và phương ngữ của Python, Lua và Javascript.

Tôi không chắc chắn nếu nó miễn phí trên tất cả các nền tảng.


4
Lưu ý rằng nếu bạn đang thực hiện phát triển bảng điều khiển, mã JITing rõ ràng không còn là vấn đề vì bạn không thể đánh dấu các trang dữ liệu là có thể thực thi được. IL nó phải được biên dịch trước cho nền tảng đích.
Jeff

3
Vấn đề JIT cũng áp dụng cho iOS. Ngoài ra Mono có hạn chế giấy phép. Bạn cần giấy phép thương mại nếu bạn muốn sử dụng nó trong môi trường mà người dùng cuối không được phép / có thể nâng cấp thời gian chạy Mono.
Sam

4

Cá nhân, tôi thấy AngelScript (xem liên kết bên dưới) dễ dàng liên kết với C ++ hơn Lua khi tôi chọn ngôn ngữ kịch bản cho dự án của riêng mình. (Tôi thực sự đã viết một thư viện trình bao bọc nhỏ cho nó để làm cho nó dễ sử dụng hơn, với chi phí linh hoạt.)

http://www.angelcode.com/angelscript/

Điều đó đang được nói, tôi nghi ngờ Lua có một vài lợi thế khiến nó trở nên hấp dẫn đối với các nhà phát triển trò chơi thương mại:

(a) Nó trưởng thành và rộng rãi hơn AngelScript

(b) Cú pháp của nó dễ dàng hơn đối với những người không lập trình (AngelScript rất giống C ++)

(c) Nó có dấu chân nhỏ hơn AngelScript (ít nhất là theo như tôi nhớ)

Tuy nhiên, nếu bạn chỉ đang viết một dự án sở thích, tôi sẽ nói rằng ít nhất là đáng xem.


2

Bạn nên chọn ngôn ngữ kịch bản có các ràng buộc ổn định và được hỗ trợ tốt cho ngôn ngữ phát triển chính của trò chơi. Nếu bạn đang viết trò chơi của mình bằng C hoặc C ++, thì có những ràng buộc khá chắc chắn có sẵn cho Python và Lua. Nếu bạn đang viết trò chơi của mình cho nền tảng .NET (sử dụng C # hoặc ngôn ngữ khác), thì tôi khuyên bạn nên sử dụng IronPython hoặc IronRuby. Cả hai đều là các triển khai ngôn ngữ hoàn chỉnh, thúc đẩy Thời gian chạy ngôn ngữ động (DLR) của Microsoft, cung cấp hiệu suất tuyệt vời và tích hợp rất chặt chẽ với .NET Framework. Khả năng tương tác giữa C # và IronPython / IronRuby ngày nay khá suôn sẻ, đặc biệt là với sự ra đời của ràng buộc callite động trong C # 4.0.


2

Kế hoạch

Vâng, đặc biệt là guile .

Với guile, bạn có thể có DSL (Ngôn ngữ cụ thể miền) của riêng bạn cho trò chơi của bạn. Khi bạn đã quen với dấu ngoặc đơn và ký hiệu tiền tố, lược đồ là thiên đường để làm việc.

Nếu bạn sẽ sử dụng guile trong một trò chơi nghiêm túc, tôi sẽ đợi một vài tháng cho đến khi phiên bản 2.0 sẽ bao gồm, IIRC, một trình thông dịch Ecmascript cũng như sơ đồ hiện tại. Bạn cũng có thể mong đợi để xem cải tiến tốc độ lớn.


1

Điều này phụ thuộc vào những gì bạn thực sự cần nó cho. Như David chỉ ra, Lua rất nổi tiếng, mặc dù một nhà phát triển trò chơi đã lưu ý với tôi rằng anh ta không hoàn toàn chắc chắn tại sao. Tôi nghĩ rằng sự nhẹ nhàng của nó là một lý do phổ biến, nhưng tại thời điểm này, tôi sẽ mong đợi rất nhiều người sử dụng Lua vì đó trở thành tiêu chuẩn thực tế. Có vẻ tốt nhất cho sửa đổi rất nhẹ.

Đối với một cách tiếp cận đầy đủ hơn, tôi muốn nói Python là lựa chọn đúng đắn. Civil IV đã sử dụng nó để có hiệu lực tốt.


0

Chọn một ngôn ngữ kịch bản khác ngôn ngữ phụ thuộc vào yêu cầu cụ thể của bạn.

Một số tùy chọn bạn phải chọn giữa có thể là:

Tốc độ của trình thông dịch - nếu tính năng của kịch bản lệnh chỉ được sử dụng bởi các nhà phát triển đối với hành vi tĩnh của kịch bản, thì tốc độ và API hoàn chỉnh và có thể mở rộng có thể là khía cạnh quan trọng nhất. Tôi đã có một số kinh nghiệm tốt với LUA ở đó.

Dễ học, khả năng truy cập - đối với một người thiết kế nội dung- / leveldesign, có thể khó học các ngôn ngữ kịch bản phức tạp hơn (phụ thuộc vào nền tảng) để tạo hành vi động. Trong trường hợp đó, việc sử dụng các ngôn ngữ dễ học (nghĩa là thường được sử dụng) và các ngôn ngữ được ghi chép tốt có thể phù hợp hơn ở đây. JavaScript hoặc Python có thể là một giải pháp tốt ở đây.

Tích hợp quy trình công việc - nếu bạn có một quy trình sản xuất cụ thể với các công cụ đã có sẵn, việc sử dụng một ngôn ngữ có vẻ hoạt động tốt nhất cho một trường hợp cụ thể là một ý tưởng tồi nếu các công cụ khác hoạt động với một công cụ hoàn toàn khác. Điều này đặc biệt hợp lệ nếu bạn có một số lập trình viên làm việc trên các công cụ khác nhau. Trong trường hợp đó, có thể hiệu quả hơn khi sử dụng ngôn ngữ "không hoàn toàn phù hợp".


0

Nếu bạn đang làm việc trên một tiêu đề cho Windows và viết mã được quản lý chạy trên Thời gian chạy ngôn ngữ chung (CLR) - giả sử trong C # - Tôi khuyên bạn nên xem tích hợp Python (Iron) như ngôn ngữ kịch bản.

Theo kinh nghiệm của tôi, Python rất dễ dạy cho những người không lập trình / thiết kế. Nó thậm chí còn dễ dàng hơn để chọn cho các nhà phát triển vì về cơ bản nó đọc như mã giả. Được gõ một cách linh hoạt chỉ là một trong những khía cạnh giúp mọi người có ít hoặc không có kinh nghiệm mã hóa trước đó và chạy nhanh với ngôn ngữ.

Ngoài ngôn ngữ dễ học và mạnh mẽ, CLR và các nhóm ngôn ngữ tại Microsoft (Anders Hejlsberg, Eric Lippert, Mads Torgersen, Jim Hugunin và cộng sự) đã thực hiện một số công việc tuyệt vời trong việc hiển thị các tính năng của trình biên dịch và thời gian chạy thông qua Dynamic mới Language Runtime (DLR) trong .NET 4, làm cho khả năng tương tác giữa mã được nhập tĩnh và mã được gõ động đơn giản hơn nhiều. Từ những gì tôi đã thấy và đã thử cho đến nay, mã soạn sẵn được giảm đến mức tối thiểu. Nó sẽ giữ cho cơ sở mã của bạn sạch sẽ và có thể bảo trì.

Bạn có thể sử dụng điều này để giữ cho ma sát giữa các phần kịch bản của trò chơi và động cơ rất thấp. Việc cả hai chạy trong cùng một VM cũng sẽ giúp cho bộ thực thi có thể tối ưu hóa nhiều mã hơn trong quá trình thực thi.


0

Câu trả lời rất nhiều phụ thuộc vào môi trường của bạn. Tôi hiện đang làm việc với Unity, vì vậy tôi sử dụng ngôn ngữ dựa trên đơn âm (trong trường hợp của tôi là C #, nhưng Javascript và Boo cũng là các tùy chọn). Câu trả lời hoàn toàn phụ thuộc vào hoàn cảnh cụ thể của bạn.


-2

ActionScript là ngôn ngữ được nhập động / tĩnh kết hợp được sử dụng để tạo trò chơi Flash, có thể được phân phối rộng rãi trên web. Nó được hỗ trợ khá tốt với các thư viện như Flixel, FlashPunk và Box2d.


-2

Nếu bạn có một nhóm hiện có sẽ sử dụng ngôn ngữ kịch bản hoặc nhà thiết kế chính (cấp độ) sẽ sử dụng kịch bản, thì hãy sử dụng ngôn ngữ họ chọn. Họ sẽ dành thời gian cho nó, vì vậy họ nên được phục vụ.

[hạt muối] Nếu bạn không có ai hoặc có kế hoạch dài hạn, thì hãy tự lăn . có, viết một trình biên dịch và / hoặc trình thông dịch cho một ngôn ngữ kịch bản có thể mất một hoặc hai tuần, nhưng về lâu dài tính linh hoạt sẽ phải trả nhiều lần. Chỉ cần không đi lạc hướng và phát minh lại. [/hạt muối]


Tôi sẽ viết một trình thông dịch hoặc trình biên dịch jit trong haskell cho sth như lisp / lược đồ hoặc bash hoặc python hoặc lua hoặc erlang (bất cứ thứ gì không có libs tiêu chuẩn của nó) trong một hoặc hai ngày. Tôi sẽ không đề nghị viết một trình thông dịch bằng C ++ hoặc Java, miễn là nó không dành cho phiên dịch sth lisp như thế nào. Nhưng dù sao đó cũng không phải là câu hỏi.
comonad

Tôi nghĩ rằng câu hỏi này hướng nhiều hơn đến những ưu và nhược điểm của các ngôn ngữ kịch bản, chứ không thực sự là làm thế nào để quyết định sử dụng cái nào. Tôi vẫn hữu ích.
Michael Coleman
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.