Налаштування та налаштування - Модифікація та збереження змінної часу виконання


19

Більшість компаній мають редактор або змінну систему управління для налаштування речей в іграх, але чи є серед цього програмного забезпечення рішення цієї проблеми? Я раніше писав дві такі системи, і працював з п'ятьма, можливо, шістьма різними, але жодна з них не була з полиці.

Кожне з цих домашніх рішень мало проблеми, починаючи від необхідності продовжувати пошук значень до неможливості збереження поточного стану змінних.

Чи є якісь зрілі бібліотеки / програми управління змінною Config / Runtime?

Я зазвичай кодую в C ++, але я думаю, що зрілий редактор налаштувань / змінних, ймовірно, буде заснований на сокеті (і, отже, в деякій мірі агностик), оскільки все поточне обладнання для розробки, окрім Nintendo, забезпечує механізм спілкування з серверами. Реалізація коду також повинна бути досить простою (мені подобається стаття hot_var / TweakableConstants, якою ділився Оскар, але це не пакет)

Відповіді:


8

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

Однак я не згоден з його антилюанськими настроями. Віддалена консоль Lua просто здається приголомшливою.


Вони також використовували telnet для налаштування змінних на MotoGP: blogs.msdn.com/b/shawnhar/archive/2009/05/01/…
Kylotan

3
Чому Telnet? HTTP / HTML, чувак! HTTP - це дуже простий протокол, і його можна легко вбудувати в гру - я це робив і раніше, він був під тисячею рядків коду.
ZorbaTHut

3
Я б сказав, що Telnet виконує цю роботу досить добре і набагато менш складна. Ви можете зробити це в 100 рядках коду, а не в 1000. І це також дозволяє надсилати оновлення, а не обстежувати їх та витягувати їх. Але якщо вам потрібен HTTP для будь-яких інших цілей у грі, я погоджуюся, що варто використовувати його і тут.
Кілотан

5

Можливо, ідея Tweakable Constannts відповідає вашим потребам. Насправді це так корисно, що ви можете подумати, що вам знадобиться складне рішення, щоб мати ефективний контроль змінних часу виконання, але насправді реалізація майже занадто проста. TheОригінальна обговорення цієї техніки також цікаво читати.

Приклад:

glClearColor( H(1.0f), H(1.0f), H(1.0f), H(1.0f) );

HМакрос розкривається що - щось на зразокHotValue(x, __FILE__, __LINE__, __COUNTER__) . Це реєструє значення для деякого глобального реєстру. Тоді є така функціяRefreshHotValues() яку ви викликаєте через рівні проміжки часу. Функція шукає кожен запис у реєстрі, аналізує конкретний вихідний файл та перезавантажує гаряче значення.

Коли ви змінюєте фактичний вихідний код, у вас є наполегливість прямо там.

Очевидно, це не спрацює там, де H()не оцінюється кожен кадр, але є способи вирішити це, як обговорювалося тут .

Можливо, ви могли б розширити цю ідею до рішення на основі сокета. Можливо, для виклику HotValue()кожного кадру може бути значна ефективність , але оскільки ви дуже легко можете скласти макрос, повністю замінивши його постійним, це не проблема.


2
@Kylotan: Ви пропустите точку. Ви змінюєте фактичний вихідний код, який розбирається під час виконання. Наполегливість відбувається через змінені джерела.
Оскар Н.

Так, я якось пропустив це, переглядаючи статтю. Я видалю свій коментар і перечитаю!
Kylotan

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

@caspin: Ви можете використовувати прості змінні, а замість них - H(int, myvar, 5)і коли зміни файлів замінюєте myvarпам'ять. Дивіться mollyrocket.com/forums/viewtopic.php?p=5395#5395
Оскар Н.

1

AntTweakBar дуже корисний для того, що ви хочете зробити, проте, більшу частину часу ви хочете мати методи, які "збираються" у випуску з деякими макросами або подібними.


0

З питання про налагодження в режимі реального часу , виходить відповідь Девіда Макграу про AsyncSocket для розробників iOS. Дивіться його відповідь для отримання додаткової інформації.


хоча це звучить чудово, це не рішення; це корисний інструмент для прийняття рішення.
Річард Фабіан

0

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


1
Йдеться не про інформацію про налаштування, це про налаштування змінних часу виконання для налагодження чи ігрових цілей.

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

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

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

-1

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

Тоді возитися зі своєю грою так само просто, як торкатися речей на телефоні. Ви можете навіть мати кілька текстових полів на телефоні, які показують значення змінних у режимі реального часу від гри, або ви можете мати бібліотеку вперед stdinабо stderrдо прокрутки текстових областей телефону. Варіанти безмежні!

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

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

Звичайно, ті, хто є користувачами Apple, ймовірно, можуть зробити те ж саме з вашими iDevices. Я особисто вважаю, що розробка iOS на порядок складніше, ніж розробка Android, і, звичайно, вищезазначений додаток може бути легко опублікований на ринку Android для легкого розповсюдження, тоді як Apple, ймовірно, не дозволить інструменту розробника в магазин додатків, тому я відчуваєте, що платформа Android краще підходить цьому інструменту.


Це було б солодко в офісних умовах. Підійдіть, щоб поговорити з художником, підключіться до нього і почніть поспілкуватися із запущеною грою сусіднього дизайнера, поки він намагається налаштувати деякі зустрічі ...
dash-tom-bang

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