Чому ми використовуємо сценарії в розробці?


67

У моєму поточному проекті скрипти Lua викликаються функціями C ++ на стороні сервера. Після цього сценарії знову викликають функції C ++, які все ще знаходяться в цьому рішенні. Чому ми повинні робити такі речі, а не викликати функцію C ++ безпосередньо? Які ситуації потрібні сценарії?

Відповіді:


73

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

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

Часто мову скриптів також використовують, щоб робити сценарії в режимі реального часу . Це зручно для налаштування деяких елементів гри або навіть для налагодження. Багато ігор забезпечують консоль для цієї (переважно внутрішньої) мети.

Цілком можливо, що ви створюєте гру, використовуючи існуючий ігровий движок, просто за допомогою сценаріїв. Таким чином, шар ігрового двигуна повністю відокремлюється від логічного рівня гри . Сучасні двигуни зазвичай можуть бути використані для створення ігор FPS або RTS легко, як це, але це неможливо для будь-якого жанру. MMO, ймовірно, вимагатиме іншого типу двигуна.

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


7
+1 за те, що сценарії, як правило, простіше оновлювати непрограмістами. Дизайнери не завжди є програмістами, і це не обов'язково.
Дуб

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

5
Джо - це не може визнати аргумент недійсним, це просто означає, що вам потрібно вирішити, де від'єднати "програмування" від "конструкторських речей", і роздільна лінія буде відрізнятися на основі технічної експертизи ваших дизайнерів (або відсутності їх).
Ян Шрайбер

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

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

38

Ви задали неправильне запитання. Справжнє питання, я думаю, це чому ми миримося з "не-сценарієм" мовами, такими як C, C ++, Java тощо? І відповідь одна з причин: продуктивність. (І може бути інерція, але ця інертність є завдяки продуктивності, і кожен, хто вміє добре писати C / C ++ / Java, може написати принаймні Ruby / Python / Lua / JavaScript.)

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


4
Мені подобається цей аргумент , так набагато краще , ніж «так дизайнери можуть програмувати.» Дуже погана ідея відкинути цінність швидкого розвитку та вміти експериментувати зі змінами, не переробляючи все.
ojrac

10

Мови сценаріїв для логіки ігор - дуже хороший приклад схеми архітектури програмного забезпечення Alternate Hard and Soft Layers . На цьому сайті є хороша дискусія (та й інші впевнені) про переваги цього.


8
  1. Кожен новий клас луа - це два рядки. Кожен новий клас C ++ - це біль.
  2. Нічого не скупіться про типи, коли все, що ви хочете, - це переміщення значень навколо.
  3. Збір сміття.
  4. Код сценарію добре відокремлений у віртуальних машинах, далеко від усіх тих неприємних блукаючих segfault і переповнення масиву.

5

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

Також мови скриптів часто прості для розуміння та їх легко програмувати, тому вам не потрібні «жорсткі» диски (ті, що стосуються управління пам’яттю / покажчиками та оптимізаціями на рівні процесора) для більшості кодів (якщо великий RPG, сценарії для AI, Spells, Item Effects та самого світу часто більше, ніж код двигуна). Мови сценаріїв дозволяють набагато більше зосередитись на тому, що робити, а не на тому, як завдяки збору сміття (у випадку Луа) та більш високому рівню абстракції.


4

Один із сценаріїв, коли сценарії корисні - це коли ми хочемо, щоб наш мотор був розширюваним плагінами / аддонами. Ці розширення створюються у багатьох випадках непрофесійними людьми (наприклад, просунутими геймерами та ентузіастами). Сценарії безпечніші та легші для цієї мети. Використовуючи сценарії, їм не потрібно використовувати компілятори і не потрібно знати про вказівники ...

Чудовим прикладом цього є гра World of Warcraft. У ньому є тисячі адонів, створених громадою. Ці доповнення записуються за допомогою LUA + XML.

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