Перейти к содержимому

Godot как закрыть игру

  • автор:

Godot все!?

Хотел зайти с вопросом на форум годота, но оказалось, что форум закрыт, открыт только для чтения, а причиной тому какие-то выяснения проблем между киберреалити (владельцем форума) и хуаном (разрабом движка), и что Хуана с компанией считают аферистами: https://godotforums.org/d/35412-sadly-i-think-godot-is-a-scam-im-not-sure-i-c.

Ок, что-то там не поделили, но двиг то есть, неужели на него тоже забьют?

Перемещено hobbit из general

shiva
18.07.23 14:40:52 MSK

Ух ты, эти вебмайстры умудрились нарыть и внедрить гадость ещё большую, чем сраный Discourse.

Оно обратно рисует посты с анимацией плавного появления, если прокрутить и вернуться хоть на экран.

Апплодирую лёжа (тущо на пол свалился).

token_polyak ★★★★
( 18.07.23 14:44:21 MSK )
Последнее исправление: token_polyak 18.07.23 14:49:48 MSK (всего исправлений: 5)

Ответ на: комментарий от token_polyak 18.07.23 14:44:21 MSK

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

shiva
( 18.07.23 14:49:52 MSK ) автор топика
Ответ на: комментарий от shiva 18.07.23 14:49:52 MSK

Иностранцы разные бывают. У тех же японцев до сих пор масса кустарных сайтиков на статическом хтмл. И текстовые борды, как и у китайцев.

token_polyak ★★★★
( 18.07.23 14:52:00 MSK )

if someone made it in 1 night, they could certainly fix it in 1 night

сразу видно специалиста

насчёт денег не до конца понятно, но кмк если не нравится, то надо форкать, а не форум закрывать

caryoscelus ★
( 18.07.23 15:30:32 MSK )
Ответ на: комментарий от token_polyak 18.07.23 14:44:21 MSK

th3m3 ★★★★★
( 18.07.23 15:45:14 MSK )

Ок, что-то там не поделили, но двиг то есть, неужели на него тоже забьют?

С чего вдруг? Тут просто какой-то форум, который кто-то запилил, теперь решил закрыть. Как он может повлиять на Godot? Учитывая, что у сообщества есть куча других способов общения, те же чатики.

th3m3 ★★★★★
( 18.07.23 15:46:38 MSK )
Ответ на: комментарий от th3m3 18.07.23 15:45:14 MSK

token_polyak ★★★★
( 18.07.23 15:54:18 MSK )

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

I’ll continue to host the forum in a read-only archive mode, for historical value, and so search engine links are not dead.

А вот это уважаемо. В отличие от п***ров админов sql.ru или forum.dklab.ru или лурки, хоть этот осознает, что c link rot надо бороться и хостинг статического текста обходится в копейки, либо можно сдать свой сайт в web.archive.org и сохранить накопленные знания.

mydibyje ★★★
( 18.07.23 16:25:33 MSK )
Последнее исправление: mydibyje 18.07.23 16:27:17 MSK (всего исправлений: 2)

Ответ на: комментарий от shiva 18.07.23 14:49:52 MSK

Реддит жив только потому что там модерация очень гибкая и тематические сообщества норм тема. Аналогов нет по большому счёту.

peregrine ★★★★★
( 18.07.23 17:02:12 MSK )

Хуан реально ведёт себя странно, называть динамические тени быстрыми, а запекание медленным, говорить что формат нормалей один. Это как программисту заказать написать программу, а он принесёт тебе картинку нарисованную фломастерами. Ступор, конфуз…Ково чего? Шиза?

По поводу денях он волен сам решать что делать, но собрать 8 лямов, основать вторую юр компанию перекинуть туда все средства и объявить что разработка годота тормозная ибо денег нету и всё это за 4 месяца от сбора средств до денях нету, выглядит со стороны по скотски.

Сор из избы про который лучше просто не знать 😀

LINUX-ORG-RU ★★★★★
( 18.07.23 17:08:13 MSK )
Ответ на: комментарий от LINUX-ORG-RU 18.07.23 17:08:13 MSK

Чёрт, а я ведь только собрался осваивать Годот, чтобы наконец сделать игру мечты…

Кстати, как там движется разработка вашей игры про ЛОР? ��

mydibyje ★★★
( 18.07.23 17:16:08 MSK )
Ответ на: комментарий от mydibyje 18.07.23 17:16:08 MSK

Про лор не знаю, а моя с блекджеком и караванами пока существует, в любом случае, годот мне нравился больше, чем юнька с периодом, из-за поддержки Линукс на совсем уж немошьных ноутах, на котором я и делаю по фанк аналог твистед метал 😀

shiva
( 18.07.23 18:25:03 MSK ) автор топика
Ответ на: комментарий от mydibyje 18.07.23 17:16:08 MSK

Чёрт, а я ведь только собрался осваивать Годот

Осваивай конечно, отличный двиг, кавайный интерфейс я прим кипятком писаю от него. GDscript на любителя, но своё дело делает, можно ускорять критичные места на плюсах. Куча платформ, программа как просто исполняемый бинарник и всё без тонн зависимостей непонятных. Для инди которому нужно готовое рабочее решение топчик, не проецируй закидоны владельца товарного знака и названия на сам движок, просто таким как он не надо пользоваться соц сетями и быть излишне публичными когда характер с гнильцой стал на фоне бабок с неба.

Бери и делай. Можешь с GREAT-DNG подружится он вот просто взял и сделал себе простой, но стильный проект Futureal 1.0 Beta .

Кстати, как там движется разработка вашей игры про ЛОР? ��

На паузе 🙁 После него я начал делать чекер новостей с сайтов, потом начал делать клиент для звука по сети (у меня на ПК звук кирдыкнулся) потом начал делать (вернулся доделывать, вернее допридумывать там надо прям ноухау лол придумать как сделать, хочу фичу, но как её реализовать понятия не имею пока, вернее как знаю, но нужен прям новый алгоритм и быстрый) предыдущий быдлопроектик. И так и получается что уже 4 в недоделанном состоянии в постоянном переключении между ними + IRL жиза

Короче пока никак, плак, плак. Ну и возникшие проблемы от того что игра будет не тем что я загадывал изначально ещё. Ой ладно. Что получится то и получится. Сомневаюсь что даже вспоминать стоит.

Как выйдет, для молодых будет кринж, для дедов стыдоба 😀 Я даже анонсировать не буду. И да, тупо квест 🙁

Как убрать консоль в Godot?

При открытие Godot выходит консоль, как ее убрать? Дико не удобно когда нужно работать сразу в нескольких приложений.

  • Вопрос задан более трёх лет назад
  • 606 просмотров

Комментировать

Решения вопроса 1

k12th

console.log(`You’re pulling my leg, right?`);

Пока нет такой возможности:(
Некоторые создают виртуальный рабочий стол и отправляют консольное окошко туда.

Ответ написан более трёх лет назад

Нравится 1 1 комментарий

Godot GDNative c++: как удалить все ссылки на объект для которого вызвано queue_free?

В игре есть боты, у каждого есть сенсорная память, в которой находится std::map, где ключ это адрес KinematicBody2D бота.
Когда убиваю бота в игре, то сперва я посылаю сигнал BotDestroyed с его адресом, чтобы удалить его отовсюду, а потом вызываю queue_free для удаления его из игры.

Проблема в том, что игра падает время от времени, т.к. иногда из мапы все таки извлекается объект с невалидным адресом. Возможно сигнал обрабатывается позже, чем происходит удаление.

Добавил ему поле статуса, куда устанавливаю флажок, что он уничтожен. Падать стало реже, но все равно иногда проскакивает.

Так как можно работать с указателями на объекты сцены, которые могут быть удалены? Есть способ проверить, что указатель больше не валидный? Или может быть можно использовать какой-то другой идентификатор, по которому можно получить доступ к объекту (если он все еще жив)?

#1
12:41, 28 дек 2020

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

#2
13:05, 28 дек 2020

lookid
Там ещё по идее через instance id можно сделать, но я ещё не до конца с этим разобрался

  • Der FlugSimulator
  • Участник

#3
18:03, 28 дек 2020

Robotex
> сперва я посылаю сигнал BotDestroyed с его адресом, чтобы удалить его отовсюду, а потом вызываю queue_free

Логичнее тогда удалять изнутри обработчика сигнала, а не «сначала/потом».
on_BotDestroyed(Node* bot)
<
remove_from_all_containers(bot);
bot->queue_free();
>

Robotex
> Есть способ проверить, что указатель больше не валидный?

Для Object is_instance_valid(obj)
Для Ref<> Ref::is_valid()

#4
11:56, 29 дек 2020

rcsim
> Для Object is_instance_valid(obj)
Чет не могу нигде найти эту функцию. Это в каком хедере?

rcsim
> Для Ref<> Ref::is_valid()
А как в такую рефу обернуть обычный указатель? Чтобы this туда засунуть

#5
12:04, 29 дек 2020

rcsim
> Логичнее тогда удалять изнутри обработчика сигнала
Логичнее

Но нужно еще удалить из памяти у других ботов. Разве что напрямую дергать у них функцию удаления прямо из этого бота, а не сигналом.

  • Der FlugSimulator
  • Участник

#6
14:35, 29 дек 2020

Robotex
> Чет не могу нигде найти эту функцию. Это в каком хедере?

Это было для gdscript. Для gdnative есть

//gdnative.h bool GDAPI godot_is_instance_valid( const godot_object *p_object);

#7
20:37, 30 дек 2020

Попробовал так, но почему-то всегда возвращается false:

godot::core_1_1_api->godot_is_instance_valid(godot::Object::cast_to((*curBot)); // curBot - итератор по списку указателей

А вот так вообще не компилится, потому что не может почему-то найти метод unreference:

godot::Ref ref = godot::Ref(godot::Object::cast_to((*curBot)));

GameAgent унаследован от KinematicBody2D

#8
20:48, 30 дек 2020

А вот так скастовало:

godot::Object::cast_to((*curBot)) != nullptr

но даже с этой проверкой упало при попытке взять get_global_position() после удаления объекта со сцены.

Кстати, проверил, сигнал удаления объекта всегда вызывается до самого удаления объекта. При этом количество объектов в памяти всех ботов уменьшилось на 1. Непонятно, почему все равно падает

  • Der FlugSimulator
  • Участник

#9
23:56, 30 дек 2020

Robotex
> godot::Object::cast_to((*curBot)) != nullptr
Вроде если curBot указатель, то дереференс не нужен.

Robotex
> Непонятно, почему все равно падает

Что значит «непонятно»? Это ты писал свою программу?

В godot есть отладчик, в плюсах есть. Логи и print в консоль имеются.
Можно отследить где косяк. А почему — это надо на этапе проектирования
предусмотреть, кто в каких контейнерах, какой цикл жизни и ситуации.

p.s. У меня тоже gdnative c++, боты динамически рождаются, умирают и перекрёстно
содержатся друг у друга и в глобальных контейнерах. Ничего не падает, слежу за всем
с помощью событий.

#10
10:52, 31 дек 2020

rcsim
> если curBot указатель, то дереференс не нужен
Это итератор. Дереференс даёт сам указатель
rcsim
> Что значит «непонятно»? Это ты писал свою программу?
Я не знаю годот идеально, особенно GDNative.

rcsim
> В godot есть отладчик
Он не показывает где проблема в c++, только стектрейс в момент креша
rcsim
> в плюсах есть
Ну я вижу, что падает при попытке вызвать get_global_position.

rcsim
> боты динамически рождаются
Я их просто в редакторе на сцену накидал. Видимо, придется написать менеджер, который будет их создавать

#11
10:55, 31 дек 2020

rcsim
> перекрёстно
> содержатся друг у друга и в глобальных контейнерах
В каком виде ты их содержишь? Сырой указатель? Ref? WeakRef? Можешь показать пример?

  • Der FlugSimulator
  • Участник

#12
15:37, 31 дек 2020

Robotex
> Я не знаю годот идеально, особенно GDNative.
Я тоже только с августа начал что-то делать на нем.
Но я переполз на него со своего велосипеда, поэтому использую godot в
основном только как рендер.

Robotex
> Видимо, придется написать менеджер, который будет их создавать
> В каком виде ты их содержишь?

Просто Node* или их потомки, т.е. как получаю от движка, типа std::vector
У меня нет «просто» менеджера. Все контейнеры имеют прикладной смысл, типа связанные
gui элементы, препятствия, враги. И основная проблема — это не добавлять, а именно аккуратно
чистить эти контейнеры. Видимо у тебя это не проработано.

#13
14:16, 4 янв 2021

Ладно, идея такая. Я добавлю синглтон, который будет создавать ботов и помещать их в контейнер. А при убийстве, просто делать remove_child вместо queue_free и использовать повторно в другом месте.

#14
23:47, 17 янв 2021

Никак не удалось заставить работать с указателями на объекты сцены.

В итоге отказался от них и стал просто хранить имя объекта. И при необходимости делать get_tree()->get_root()->get_node(). Но теперь я зависим от местоположения ноды в иерархии сцены.

А можно получить ноду по ее instance_id?

MX Linux и игры: Подготовка операционной системы для запуска игр, и проблема таймеров Godot Engine

Внезапный отвал видеокарты может повергнуть в ужас любого геймера, однако есть нечто ещё более страшное.

29 сентября 2023, пятница 07:31
Chimbal [ ] для раздела Блоги

реклама

Предисловие

Что для геймера может быть страшнее отвала видеокарты? Отобрать компьютер целиком? Нет, достаточно просто удалить Windows и заставить пользоваться только Linux, поверьте, это будет самая настоящая пытка практически для любого геймера, особенно если при этом ограничить скорость интернета до условных 5 Мбит/с.

реклама

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

Но оставим геймеров в покое, у них и так жизнь непроста, в последнее время постоянно кормят какими-то «лучами», фейковыми кадрами для накрутки счётчика FPS, растянутыми 720p до 4K на RTX 4090, ибо реальные 4K даже такая видеокарта иногда не способна достойно вытянуть, и т.п.

В предыдущей части рассказано про основные проблемы линуксов для игр, в принципе уже можно бросать всё и возвращаться в Windows, однако так не интересно, нужно ведь проверить в деле, а то вдруг в линуксах действительно «один клик, и всё работает даже лучше винды», а я просто неправильно оценил всё?

реклама

Так что берём колотушку в руки и начинаем весёлые пляски с бубном вокруг костра! Ведь плясать действительно есть над чем!

Wine

Что первым делом нужно любому геймеру который окунается в линукс? Правильно, это костыль Wine, все любимые игры скорее всего разработаны только для Windows, и без костылей их никак не запустить.

Так как я не хочу постоянно пердолить репозитории выкачивая гигабайтами бесконечные зависимости при переустановке системы, или при установке софта в виртуальной машине, то скачиваю приложение один раз через команду «sudo apt-get —download-only install winehq-staging», а после копирую из кэша загруженные пакеты в отдельную папку под названием wine812, а кэш в обязательном порядке очищаю, само собой это можно сделать только используя root права.

реклама

Естественно это всё лучше делать в виртуальной машине с абсолютно голым дистрибутивом, а не на реальном ПК, ибо в реальном ПК уже могут быть какие-то зависимости от другого софта, и они не будут загружены. Если вдруг нужно переустановить линукс, и установить всю эту дичайшую охапку зависимостей ради WineHQ, а там вдруг чего-то не найдётся, то пиши пропало:

Важно заметить! Метод скачивания зависимостей через —download-only работает только в пределах одного конкретного дистрибутива! Если вы таким образом скачаете приложение в MX Linux 23 KDE, а установить попытаетесь в MX Linux 23 Xfce, то есть вероятность конфликта или нехватки каких-то зависимостей! Этот способ не решает ад зависимостей и проблемы репозиториев!

Попытка установить WineHQ в Ubuntu 16.04 LTS:

реклама

В общем WineHQ у меня установлен, ведь без него ну никуда, даже скомпилировать игру в Godot Engine невозможно по-человечески для платформы Windows, ещё иногда говорят что линуксы просто идеальны для всех разработчиков, ага, охотно верю, пожалуйста, снимите лапшу с моих ушей.

Proton

Установил значит WineHQ, и тут прибегают линуксоиды, начинают рассказывать какой я весь неправильный, ведь нужно ставить СВЯТОЙ ПРОТОН! Просто одну команду в терминал или пара кликов в центре приложений! Окей, иду в центр приложений и вбиваю в поиск «proton»:

Что дальше? Дистрибутив не дистрибутив? Руки кривые? Мозги вендузятные? Что устанавливать?

Но я же не буду бросать на этом всё? Найду этот несчастный Proton? Ну найду ведь? Конечно найду, правда это будет нечто сомнительное.

Если пошарить по всем доступным репозиториям, то можно найти proton-caller, который по краткому описанию — то самое:

Столбцы не растягиваются как в Windows, потому список выглядит немного криво.

Но если заглянуть в подробное описание, то всплывает масса вопросов, а что по зависимостям? Мне нужен оригинальный Proton от Valve, или оно само там как-нибудь родит под себя? А мне нужно Wine устанавливать и настраивать, или оно опять как-то само там перекрутиться с тем что есть? А Steam клиент мне нужно устанавливать? Я не хочу устанавливать DRM платформу под названием Steam, оно само установит её без моего разрешения? Или как это вообще у них там крутиться? Может мне еще мануалы нужно курить и заклинания через терминал вбивать?

Вроде вот и список зависимостей минимальный, но предлагает steam, да и размер неадекватно маленький какой-то, а в описании столько всего наговорили, что это просто какой-то комбайн всемогущий:

А ведь действительно, куда без мануалов и заучивания заклинаний для терминала, чтобы всё делать «правильно», там же выяснилось, что нужно ещё с конфигами ковыряться:

Так, окей, я вижу ссылку на DEB пакет, это уже интересно:

Да, технически DEB пакет есть, но весит он всего две сотни килобайт, ну не может здоровенный костыль для запуска Windows игр так мало весить!

В общем за дело! Скачиваю proton-caller из репозитория, и да, действительно только один пакет загрузился в кэш, значит дела очень плохи, ведь насасывать все зависимости будет само приложение, а это порой гораздо тяжелее развернуть заново после переустановки ОС, или на несколько разных ПК для тестов, чем если просто взять папку с дичайшей охапкой зависимостей под один конкретный дистрибутив:

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

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

Вы как хотите, а я не хочу сейчас начинать неистовые пляски с «протоном», уже видно, что пляски наверняка будут, и это может занять просто неадекватное количество времени. Я понятия не имею сколько там этот proton-caller насосёт зависимостей после установки в систему, и что вообще из этого выйдет, если вообще выйдет.

Но постойте, там же был ещё какой-то protontricks! Да, есть такое, очередной сомнительный костыль для костылей, еще и зависит от питухона (Python) и winetricks, последний у меня не установлен даже, уже молчу про непонятный zenity:

В общем оставим в покое несчастный Proton, пока линукс в очередной раз не поломался.

Что дальше?

Честно? Я сам уже запутался немного, Wine установили, Proton отфутболил от греха подальше, в принципе можно запускать игры созданные для Windows? В целом да, но погодите немного, начнём с более простого, а именно ChimbaBench.

Есть у меня значит портативный бенчмарк как в 32 битном виде, так и 64 битном:

С 64 битной версией проблем никаких, всё запускается и работает, проблемы начинаются при попытке запустить 32 битную версию приложения!

Запустив 32 битную версию приложения у меня попросту начала прерываться музыка в браузере, раза 3-4 прерывалась секунд на 5-6, но в итоге ничего не запустилось:

В общем, как всегда, всё через жопу в линуксах, 64 битный дистрибутив не может запустить 32 битный софт? Это нормально! Только для линуксов конечно, но ведь нормально же!

Само собой и Wine страдает от неполноценности «пингвинов», которые не способны запускать 32 битный софт, и правда, кому вообще сдалась масса 32 битного софта и игр.

Наверное нужно поплясать с бубном, подтянуть каким-то раком зависимости, каким-то чудом умудриться скачать и заставить работать 32 битные библиотеки в системе, настроить префиксы Wine, и всё такое. Короче, давайте просто смиримся с тем фактом, что 32 битные игры не сможем запустить, эх, а я хотел поиграть в Project IGI 2 под линуксом:

ChimbaBench v2.5

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

Его можно просто взять, и запустить двойным кликом по «экзешнику» практически в любом дистрибутиве Linux 2013 года и новее, да, иконки у исполняемого файла нет, спасибо неполноценным линуксиодным исполняемым файлам, и 32 битные версии не смогу протестировать, ибо дистрибутив умеет только в 64 бита:

Сейчас у меня драйвер видеокарты «из коробки», то есть Nouveau, и производительность оставляет желать лучшего, это была Windows версия ChimbaBench запущенная через Wine:

И даже можно сказать что с графикой всё нормально, если бы не артефакты выявленные в процессе тестирования:

Далее Linux версия ChimbaBench, в принципе уровень производительности такой же, как и артефакты, не вижу разницы между Windows версией через Wine, а теперь обратим внимание на очень интересный нюанс:

Заметили подвох? А теперь?

Для тех кто не понял, правый счётчик FPS это функция игрового движка Godot Engine, ну чтобы разработчики игр не писали свои счётчики FPS для отладки игры, а просто использовали уже готовый, логично? Логично. Слева мой самодельный счетчик, подсчитывающий средний FPS на протяжении теста, и он работает максимально дубово, берёт общее количество отработанных циклов _process(delta) и делит на время выполнения теста, по умолчанию 60 секунд:

Получается, игровой движок выдает неправильное значение средней частоты кадров? Ведь показывает 4-5 FPS всегда, в том числе во время проведения теста, а мой таймер насчитывает средний FPS 7.5, так кому верить?

Вообще я записал на видео небольшой фрагмент тестирования, и внимательно проверил через Kkenlive, оказалось, что на самом деле там всего 4-5 кадра в секунду, то есть функция Godot Engine работает правильно, выходит мой счётчик неправильно работает? Ух, как же так может быть.

Такое может быть если _process(delta) иногда работает «вхолостую» без отрисовки кадра, что на самом деле очень паршиво, так как может приводить к рывкам изображения, потому что в логике игры может что-то произойти, но не попасть на экран когда должно.

Хотя в моём случае бенчмарк просто работает гораздо дольше заданного времени, ~100 секунд вместо заданных 60, отсюда и счётчик насчитал больше положенного, и средний результат получился больше, ведь я полагаюсь на стандартный таймер Godot Engine при тестировании, именно стандартная функция таймера Godot Engine считает время, а это значит лишь одно, это не мой косяк.

На всякий случай пересмотрел скриншоты с результатами которые были сделаны в среде Windows, и да, в среде Windows результат не отклонялся никуда, да и визуально в среде Windows тест работал нормально, а сейчас в линуксе он прямо откровенно долго крутился, хотя я не сразу обратил на это внимание, а зря:

И что с этим делать? Исправлять свой код подсчитывающий результат? Там исправлять нечего, он прост как пробка. Отказаться от использования стандартных таймеров игрового движка Godot Engine, и куролесить свой собственный? Очень не хотелось бы.

Так или иначе косяк обнаружен, даже в виртуальной машине в Linux Mint 15 таймер считает неправильно, и выдает ровно такой же средний FPS 7.5, хотя фактический там был всего 2-3 при разрешении 640×360.

Чтобы окончательно поставить точку, я специально запустил Windows 7, бенчмарку выставил разрешение 2160p, 16x сглаживание, таким образом смог уронить FPS примерно до 15, запустил тест и все таймеры сошлись тютелька в тютельку, как и результаты:

О чём это говорит сейчас? Можно сказать что это косяк линукса? Если бы я был предвзят к линуксам, так бы и сказал, но это явно косяк таймеров Godot Engine, я ещё раз специально загрузил Windows 7, и на этот раз подсунул LLVMpipe драйвер приложению, ну чтобы наверняка уронить FPS на дно. И это сработало, надпись «Preparing» должна висеть ровно две секунды, но она висит уже даже хрен не знает сколько:

Крайне паршивая ситуация однако. Судя по всему, минимальный FPS при котором стандартные таймеры адекватно работают на уровне всего 7.5.

Если FPS ниже — начинаются «чудеса», а это может даже стать лёгким способом читерить в играх, просто опускаем FPS до 3-4 и спокойно проходим испытания на время, таймеры всё равно ведь будут считать в разы медленнее положенного, и игра будет считать что это нормально, если конечно не сверять время с часами операционной системы, что не только лишний геморрой, но и тоже вполне можно «подкрутить».

Продолжение следует.

Вместо того, чтобы просто начать играть, я в очередной раз застрял с косяками.

Но кое-что было действительно неожиданно, это кривая работа таймеров Godot Engine при FPS ниже 8, тут даже я офигел, хотя казалось бы, столько косяков уже повидал.

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

В любом случае я рад выявленному косяку, теперь мы все немного больше знаем о поведении Godot Engine в нетипичных условиях, а кто-то вероятно даже не знал, и уже набросал целую игру набитую тысячами таймеров. Могу только посочувствовать, особенно если это позволяет игрокам нечестно получать преимущество в игре.

Я наконец уже поиграю в игры, или так и буду ловить бесконечные косяки?! Как же меня расстраивает тот факт, что в среде Windows я просто запускаю игру, и спокойно играю, а в линуксах вот это всё странное дерьмо вечно заставляет танцевать с бубном.

Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *