Яку мову сценаріїв слід вибрати для своєї гри? [зачинено]


53

У яких випадках які мови сценаріїв кращі за інші?

Усі відповіді оцінені, будь ласка, надайте опис та опишіть, у яких випадках мова переважає.

(Пам'ятайте, одна мова на відповідь)

Відповіді:


39

Lua широко використовується в ігровій індустрії . Від незалежних ігор ( Aquaria ) до назв AAA (Civilization).

Основна причина? Я б сказав, тому що це легко засвоїти і легко включити у свої ігри. Але те саме можна сказати і для Python, я впевнений. Сценарій, загалом, не важкий. Я думаю, що справжня причина, з якою ви повинні піти з Lua, полягає в тому, що це доведено, що призводить до набагато більше ресурсів для вас, щоб навчитися .. Якщо ви відчуваєте, що експериментуєте з чимось поза нормою, я б почав возитися з іншою мовою.


8
Lua дуже популярний, оскільки надає функції "мета мови". Ви можете реалізовувати об'єктно-орієнтовані структури або чисті процедурні функції тощо. Він має дуже простий C-інтерфейс і дає розробнику двигуна велику гнучкість у самій мові.
Каранца

3
Я не впевнений, що пітон зробив би вдалий вибір. Прив'язки C для python набагато більше спрямовані на розширення python з C, а потім вбудовування python в C.
SpoonMeiser

5
Як я почув, Ĺua також має хороші показники виконання в порівнянні з іншими мовами сценаріїв, такими як Python. (і вона має повну підтримку закриття - справді чудова функція, якщо ви запитаєте мене ..)
thbusch

2
Насправді Цивілізація IV використовує пітон ...
Еміліано

2
@happy_emi Дійсно, поки Civ V використовує Lua
Tobias Kienzler

23

Білка

Білка має цікаву історію. Він був побудований після того, як у архітектора ігор виникли проблеми з непередбачуваним збиранням сміття Луа, і божевільно все є недійсним, навіть якщо його не існує .

Білка - мова, що використовується в лівому 4 Dead 2 . API дуже схожий на луа (автор Білки любить дизайн Луї ).

Таким чином, Білка - це дивовижна мова, оскільки це своєрідне Луа 2-го покоління. Це зайняло хороші ідеї та зняло прикрих ексцентриси.

Те саме від Луа:

  • корутини
  • таблиці та метатабелі
  • динамічний набраний
  • набагато більше

Нове для білки:

  • заняття
  • масиви
  • регулярні вирази замість синтаксису відповідності Луа.
  • Мова стилю C / C ++ / Java / C # замість стилю Pascal / Delphi.
  • набагато більше

Основний недолік білки - це не Луа. Луа набагато ширше використовується. Але якщо це не проблема Білка - це легка перемога. Однак часто популярність мови є корисною особливістю сама по собі, тому рішення не є настільки чітким.


9

V8 Javascript від Google.

PRO:

Досить простий у використанні

Постійно стає краще

Потужний та гнучкий

Інші Як уже згадувалося, javascript - це звичайний інструмент програміста. Додавання його до моїх ігор відкрило набагато більше людей, які відчувають себе здатними, ніж інші мови. Він також підтримує величезну кількість кастингу та конвертації, щоб заощадити на роботі програміста, а також робить його дійсно простим у використанні, добре працює зі STL.

Можливі CON:

Документація може заплутати Його насправді не найкраще.

Приклади Найчастіше мережа дивацтва. Не маючи твердої простоти, він зустрічається як набагато вищий рівень, ніж він є.

Шаблони Іноді їх ненавидять або уникають.

Розмір кодової бази SDK Створений розмір коду може вважатися процвітаючим.


Одним із конфліктів для мене був розмір. Якщо ви будуєте просту / випадкову гру, то двигун v8 досить великий і навіть може бути в багато разів більшим, ніж уся ваша гра.
Зак Людина

Щоправда, але як окремий файл .lib викликає велике занепокоєння? Він просто прорізається поруч із SDL або вашим луа. Якщо ви мали на увазі згенерований розмір коду, я не перевіряв, наскільки він великий, але це не поганий момент.
підкреслити

Я мав на увазі розмір згенерованого коду. Я припускаю, що це НЕ НАВЧАЛЬНО, враховуючи розмір більшості ігор сьогодні.
Зак Людина

1
Тестовано, за замовчуванням shell.cc з останніми годинами SVN в 1,444 МБ біт.лі / 9DNn8J . Хоча це здається досить здоровенним, більшість бібліотек, необхідних для того, щоб зробити що-небудь інше (мережа, графіка), додадуть до цього так само драматично. Побічний проект шахти з v8, phoenixGL, ENet, пучками підсилення та набагато більшим кодом всередині рішення (на зразок стиснення, шифрування, бібліотеки gui, awesomium) працює на 2,5 Мб у візуальній студії 2008 року - і на блискавці " реліз "збільшити вагу в 861 Кб. Для мене це не все так погано. На певних платформах я міг бачити, що це викликає занепокоєння - не для більшості :)
підкреслити

1
В своїх проектах я кілька разів використовував V8. IMO Javascript - найбільш ідеальна мова, яка використовується для сценаріїв ігор. Об'єкти, що базуються на подіях та прототипи, роблять все так просто. :)
Стівен Белангер

7

Це залежить від гри та її цільової платформи.

Гра, в якій працює 100 персонажів без гравців (ігри RTS), відрізняється від гри, яка працює лише у 2 (Street Fighter). Гра, яка працює на ПК, має інші потреби, ніж гра, яка працює на консолі.

Луа популярна

GameMonkey використовується декількома командами. Це швидше, ніж Луа, і краще в нарізанні різьби.

Python використовувався в декількох іграх.

JavaScript - це можливий варіант, оскільки ви можете завантажити двигуни JavaScript. Існує більше програмістів JavaScript, ніж будь-який інший тип програмістів.

Існують також спеціалізовані мови.

SCUMM використовується в кількох пригодницьких іграх і особливо підходить для цих ігор.


Javascript - дійсно гарна ідея. Цікаво, чому, схоже, не було тяги в цьому просторі? Будь-які ідеї?
cflewis

JavaScript має тягу. Єдність це використовує. Так само і Wolfire Games для свого двигуна.
А. А. Грапсас

Два двигуни насправді не роблять тяги. Я здогадуюсь, що причина недавньої розробки полягає в тому, що до Mono та V8 не було багато хороших інтерпретаторів JavaScript. SpiderMonkey - це не те, на що ви дивитесь, і кажете "Так, я хочу, щоб моя гра була такою швидкою, худорлявою і стабільною!"

4

Для повноти, ще одним варіантом є моно-скрипт , який дозволяє використовувати реалізацію Novell рамки .NET для сценаріїв. Це те, що використовує Unity . Ось ще одна сторінка про вбудову моно в ваш додаток.

Моно-рамка швидша, ніж більшість (можливо, всі?) Скриптових мов там, тому що вона не інтерпретується, а тому, що між компілятором і набором інструкцій є шар, вона дозволяє програмувати на різних мовах, включаючи C # і діалекти Python, Lua та Javascript.

Я не впевнений, чи безкоштовно на всіх платформах.


4
Зауважте, що якщо ви займаєтеся розробкою консолі, код JITing, мабуть, не викликає сумнівів, оскільки ви не можете позначати сторінки даних як виконувані. IL він повинен бути попередньо складений до цільової платформи.
Джефф

3
Випуск JIT також стосується iOS. Також Mono має ліцензійні обмеження. Вам потрібна комерційна ліцензія, якщо ви хочете використовувати її в умовах, коли кінцевому користувачеві заборонено / зможе оновити режим виконання моно.
Сем

4

Особисто я виявив, що AngelScript (див. Посилання нижче) набагато простіше прив’язати до C ++, ніж Lua, коли я вибирав мову сценаріїв для власного проекту. (Я фактично написав невелику бібліотеку для обгортки, щоб зробити її ще простішим у використанні, ціною деякої гнучкості.)

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

Зважаючи на це, я підозрюю, що Lua має кілька переваг, які роблять її переконливою для розробників комерційних ігор:

(a) Він більш зрілий і поширений, ніж AngelScript

(b) Синтаксис легший для непрограмістів (AngelScript дуже схожий на C ++)

(c) Він має менший слід ніж AngelScript (принаймні, наскільки я пам'ятаю)

Якщо ви просто пишете проект хобі, я б сказав, що AngelScript принаймні варто подивитися.


2

Ви повинні вибрати мову сценаріїв, яка має стабільні та добре підтримувані прив’язки до основної мови розробки вашої гри. Якщо ви пишете свою гру на C або C ++, то для Python та Lua доступні досить міцні прив’язки. Якщо ви пишете свою гру для платформи .NET (використовуючи C # або іншу мову), я дуже рекомендую використовувати або IronPython, або IronRuby. Обидва є повноцінними мовними реалізаціями, які підтримують динамічну програму Microsoft Dynamic Language Runtime (DLR), що забезпечує чудову продуктивність та дуже тісну інтеграцію з .NET Framework. Взаємодія між C # і IronPython / IronRuby є досить гладкою в наші дні, особливо з впровадженням динамічного зв'язування callites у C # 4.0.


2

Схема

Що ж, гілка конкретно.

За допомогою підступу ви можете мати власний DSL (мова, визначений для домену) лише для своєї гри. Як тільки ви звикнете до дужок та позначень префіксів, схема роботи - це рай.

Якщо ви збираєтеся використовувати підступ у серйозній грі, я зачекав би пару місяців до випуску 2.0, оскільки він буде включати IIRC, інтерпретатор Ecmascript, а також поточну схему. Ви також можете очікувати значних поліпшень швидкості.


1

Це залежить від того, для чого вам насправді це потрібно. Як зазначає Девід, Lua дуже популярний, хоча один розробник гри відзначив мені, що він не зовсім впевнений, чому. Я думаю, що його легкість є загальною причиною, але в цей момент, я б очікував, що багато людей використовують Lua, тому що це стало де-факто стандартом. Це здається найкращим для дуже легкої модифікації.

Для більш повноцінного підходу я б сказав, що Python - це правильний вибір. Civ IV використовував це для гідного ефекту.


0

Вибір однієї мови сценаріїв над іншою залежить від ваших конкретних вимог.

Деякі з варіантів, які ви можете вибрати, можуть бути:

Швидкість інтерпретатора - якщо функція скриптування використовується виключно, тобто розробниками для статичного поведінки сценарію, то найбільш важливим аспектом може бути швидкість і повноцінна та розширювана API. У мене там було хороший досвід роботи з LUA.

Легке в навчанні, доступність - для вмісту / левельдесігнанта може бути важко вивчити більш складні мови сценаріїв (залежить від фону), щоб генерувати динамічну поведінку. У цьому випадку тут може бути більш доцільним використання легкої для засвоєння (тобто загальновживаної) та добре задокументованої мови. JavaScript або Python можуть бути хорошим рішенням тут.

Інтеграція робочого процесу - якщо у вас є певний виробничий конвеєр із уже наявними інструментами, може бути поганою ідеєю використовувати мову, яка, здається, найкраще працює в даному випадку, якщо інші інструменти працюють із зовсім іншим. Це особливо справедливо, якщо у вас є кілька програмістів, які працюють над різними інструментами. У цьому випадку може бути ефективніше використовувати "не зовсім придатну" мову.


0

Якщо ви працюєте над заголовком для Windows і пишете керований код, що працює над загальною мовою виконання (CLR) - скажімо, наприклад, на C # - я б запропонував вам поглянути на інтеграцію (Iron) Python як мову сценарію.

На мій досвід, Python дуже легко навчити непрограмістам / дизайнерам. Це навіть простіше підібрати для розробників, оскільки він по суті читає як псевдокод. Набір динамічного набору - лише один із аспектів, який допомагає людям, які не мають попереднього досвіду кодування, швидко працювати з мовою.

Окрім того, що мова є простою для вивчення та потужною, CLR та мовні команди в Microsoft (Anders Hejlsberg, Eric Lippert, Mads Torgersen, Jim Hugunin та ін.) Провели велику роботу з розкриття функцій компілятора та часу виконання через новий Dynamic Мова виконання (DLR) у .NET 4, що робить взаємодію між статично набраним кодом та динамічно набраним кодом набагато простішим. З того, що я бачив і намагався до цього часу, код котла зменшується до мінімуму. Це дозволить зберегти вашу кодову базу в чистоті та ремонті.

Ви можете використати це, щоб тримати тертя між сценарієм частини вашої гри та двигуном дуже низьким. Запуск обох в одному і тому ж VM також дозволить час виконання оптимізувати більше вашого коду під час виконання.


0

Відповідь дуже залежить від вашого оточення. Зараз я працюю з Unity, тому я використовую мову на основі моно (у моєму випадку C #, але Javascript та Boo - це також варіанти). Відповідь повністю залежить від ваших конкретних обставин.


-2

ActionScript - це гібридна динамічна / статична набрана мова, яка використовується для створення Flash-ігор, які можуть широко розповсюджуватися в Інтернеті. Він досить добре підтримується з такими бібліотеками, як Flixel, FlashPunk та Box2d.


-2

Якщо у вас є команда, яка буде використовувати мову сценаріїв або провідний (рівний) дизайнер, який буде використовувати сценарій, тоді почніть будь-яку мову вибору. Вони витратять на це свій час, тому їм слід потурбуватися.

[зерно солі] Якщо у вас немає кого-небудь або не плануєте довгострокову перспективу, тоді закатайте свій власний . так, написання компілятора та / або інтерпретатора мови сценаріїв може зайняти тиждень-два, але в перспективі гнучкість буде платити багато разів. Тільки не збивайтесь з глузду і не вигадуйте епізод. [/ зерно солі]


Я би написав інтерпретатора або jit-компілятора в haskell для чого, наприклад, lisp / схема або bash, python або lua або erlang (що завгодно, без стандартних ліб) за один-два дні. Я б не пропонував писати інтерпретатора, тобто на C ++ або Java, доки це не для інтерпретації того, на чому схожий. Але це все-таки не було питанням.
comonad

Я думаю, що питання було більш орієнтоване на плюси та мінуси мов сценаріїв, а не на те, як вирішити, яку саме використовувати. Я все-таки корисний, мабуть.
Майкл Коулман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.