Настройка и настройки - изменение и сохранение переменных во время выполнения

19

У большинства компаний есть редактор или система управления переменными для настройки игр, но есть ли промежуточное программное обеспечение для решения этой проблемы? Я сам написал две такие системы в прошлом и работал с пятью, может быть, шестью разными, но ни одна из них не была в продаже.

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

Существуют ли зрелые библиотеки / приложения управления переменными Config / Runtime?

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

Ричард Фабиан
источник

Ответы:

8

Мне нравится то, что Ноэль предложил в своем блоге. Телнет на основе переменной твикер . Используя telnet, он смог использовать любой клиент telnet для редактирования переменных. Позже они построили графический интерфейс вокруг протокола. Это кажется достаточно простым, что, вероятно, оно не стоит библиотеки промежуточного программного обеспечения, но полезно посмотреть на его код.

Однако я не согласен с его настроением против Луа. Удаленная консоль Lua кажется просто потрясающей.

deft_code
источник
Они также использовали telnet для настройки переменных в MotoGP: blogs.msdn.com/b/shawnhar/archive/2009/05/01/…
Kylotan,
3
Почему телнет? HTTP / HTML, чувак! HTTP является очень простым протоколом и может быть легко встроен в игру - я делал это раньше, он был намного меньше тысячи строк кода.
ZorbaTHut
3
Я бы сказал, что Telnet выполняет свою работу довольно хорошо и намного менее сложен. Вы можете сделать это в 100 строках кода, а не в 1000. И это также позволяет загружать обновления, а не опрашивать и извлекать их. Но если вам нужен HTTP для каких-либо других целей в вашей игре, я бы согласился, что его стоит использовать и здесь.
Kylotan
5

Возможно, идея настраиваемых констант соответствует вашим потребностям. На самом деле это настолько удобно, что вы можете подумать, что вам потребуется комплексное решение для эффективного управления переменными времени выполнения, но в действительности реализация почти слишком проста. Оригинальное обсуждение этой техники также интересно читать.

Пример:

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

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

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

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

Возможно, вы могли бы расширить эту идею до решения на основе сокетов. При вызове HotValue()каждого кадра могут возникнуть значительные потери производительности , но поскольку вы очень легко можете скомпилировать макрос, полностью заменив его константой, это не проблема.

Оскар Н.
источник
2
@ Килотан: Вы упускаете суть. Вы изменяете фактический исходный код, который анализируется во время выполнения. Постоянство через измененные источники.
Оскар Н.
Да, почему-то я упустил это при просмотре статьи. Я удалю свой комментарий и перечитал!
Kylotan
3
Я мог бы быть только мной, но эта техника кажется ... неприглядной. Я думаю, это потому, что я потратил так много времени, ненавидя магические числа, и это будет работать только для магических чисел. Я бы предпочел, чтобы чистый цвет был частью файла конфигурации или скрипта. Волшебство приходит с возможностью горячей загрузки ресурсов.
deft_code 9.09.10
@caspin: Вы можете использовать простые переменные и вместо этого иметь H(int, myvar, 5)и при изменении файла заменять myvarв памяти. См. Mollyrocket.com/forums/viewtopic.php?p=5395#5395
Оскар Н.
1

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

DrDeth
источник
0

От вопроса об отладке в реальном времени приходит ответ Дэвида Макгроу об AsyncSocket для разработчиков iOS. Смотрите его ответ для получения дополнительной информации.

tenpn
источник
хотя это звучит здорово, это не решение проблемы; это полезный инструмент для принятия решения.
Ричард Фабиан
0

Управление настройками, похоже, является одной из тех вещей, которые переделываются с нуля для каждой игры, возможно, из-за того, насколько она проста и высокой вариативности в типах необходимых настроек. Предполагая, что у вас приличная настройка бэкэнда хранилища (SQL / что угодно), вы можете за один-два дня создать надежное решение для управления настройками, чтобы в промежуточном программном обеспечении не было особой необходимости для бизнеса. Я считаю, что в большинстве случаев лучше всего использовать его для хранения информации об игроке.

Бен Зейглер
источник
1
Дело не в информации о настройках, а в настройке переменных времени выполнения для целей отладки или игрового процесса.
Многие типы переменных времени выполнения для отладки и игрового процесса имеют смысл хранить в каком-то постоянном бэкэнде. Это позволяет изменять их во всей системе при развертывании. SQL - это просто пример серверной части, вы можете добавить информацию в файл на диске или в любое количество других методов.
Бен Цейглер
1
Проблема состоит в том, чтобы заставить их измениться в реальном времени. Вероятно, это включает в себя настройку какого-либо триггера на БД и что-то в игре, которое может обрабатывать этот триггер и перечитывать значения асинхронно, пока игра продолжается. Не непреодолимый, но и не очень простой.
Kylotan
Код, который управляет этим триггером БД, будет кодом, который ищет Ричард, и является интересной / многократно используемой частью. Перемещение констант в БД, а не в файловую систему или другой инструмент, не делает этот код волшебным, и, вероятно, просто усложняет его.
-1

В последнее время я действительно думал об этом, и я думаю, что он был бы отличным кандидатом на приложение для Android в сочетании с небольшой библиотекой на любом языке, который вы хотите . Приложение будет настраиваемым набором кнопок, переключателей, выпадающих меню и т. Д. (Любой виджет, который вы хотите), и оно будет отправлять действия через WLAN (или USB, если вы хотите усложнить ситуацию) в библиотеку. Библиотека создала бы отдельный поток от игрового процесса и знала бы, какие элементы управления на телефоне Android соответствуют каким переменным в игре (вы установили бы их в своем коде запуска) и была бы подключена к приложению Android.

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

Единственная реальная проблема - со скоростью. Если скорость и время реакции имеют решающее значение, тогда вы просто подключите телефон через USB, и adb (отладчик Android) поддерживает переадресацию портов через USB на телефон. Но в противном случае WLAN будет иметь очень маленькую задержку, которая, я думаю, будет вполне приемлемой для этой цели.

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

Конечно, те из вас, кто является пользователями Apple, могут сделать то же самое с вашими iDevices. Лично я нахожу, что разработка iOS на несколько порядков сложнее, чем разработка Android, и, конечно, вышеупомянутое приложение может быть легко опубликовано на рынке Android для удобного распространения, в то время как Apple, вероятно, не допустит инструмент разработчика в магазин приложений, поэтому я чувствую, что платформа Android лучше подходит для этого инструмента.

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