Как убрать консоль в Godot?
При открытие Godot выходит консоль, как ее убрать? Дико не удобно когда нужно работать сразу в нескольких приложений.
- Вопрос задан более трёх лет назад
- 606 просмотров
Комментировать
Решения вопроса 1

console.log(`You’re pulling my leg, right?`);
Пока нет такой возможности:(
Некоторые создают виртуальный рабочий стол и отправляют консольное окошко туда.
Ответ написан более трёх лет назад
Нравится 1 1 комментарий
Завершающие штрихи¶
На данный момент мы завершили всю функциональность для нашей игры. Ниже остаются некоторые шаги, слегка добавляющие «сока» и улучшающие игровой опыт.
Не стесняйтесь совершенствовать геймплей своими собственными идеями.
Фон¶
Серый фон по умолчанию не очень привлекателен, так что давайте поменяем его цвет. Один из способов сделать это — использовать узел ColorRect . Создайте его первым узлом под Main — таким образом он будет прорисовываться за другими узлами. ColorRect имеет только одно свойство: Color . Подберите цвет, который вам нравится, и выберите «Макет» -> «Полный прямоугольник» так, чтобы он покрывал экран.
Вы также можете добавить фоновое изображение, если у вас оно есть, используя вместо ColorRect узел TextureRect .
Звуковые эффекты¶
Звук и музыка могут быть одним из самых эффективных способов придания игровому процессу большей привлекательности. В папке ресурсов вашей игры есть два звуковых файла: «House In a Forest Loop.ogg» для фоновой музыки и «gameover.wav» для случаев, когда игрок проигрывает.
Добавьте два узла AudioStreamPlayer как дочерние для Main . Назовите один из них Music , а другой — DeathSound . В каждом из них нажмите на свойство Stream , выберите «Загрузить» и добавьте соответствующий звуковой файл.
Для воспроизведения музыки добавьте $Music.play() в функцию new_game() и $Music.stop() в функцию game_over() .
Наконец, добавьте $DeathSound.play() в функцию game_over() .
Сочетание клавиш¶
Поскольку в игру играют с помощью клавиш управления, было бы удобно, если бы мы могли начать игру, нажав клавишу на клавиатуре. Мы можем сделать это с помощью свойства «Shortcut» узла Button .
В предыдущем уроке мы создали четыре события ввода для перемещения персонажа. Мы создадим аналогичное событие ввода для привязки к кнопке «Старт».
Выберите «Проект» -> «Настройки проекта», а затем перейдите на вкладку «Список действий». Точно так же, как вы создавали события ввода для движения, создайте новое событие под названием start_game и добавьте в него клавишу Enter` .
В сцене HUD выберите StartButton и найдите его свойство Shortcut в Инспекторе. Выберите «Новый Shortcut» и нажмите на пункт «Shortcut». Появится второе свойство Shortcut. Выберите «Новый InputEventAction» и нажмите на появившийся «InputEventAction». Наконец, в свойстве Action введите имя start_game .

Теперь, когда появляется кнопка запуска, вы можете либо нажать на неё, либо на клавишу Enter , чтобы начать игру.
И на этом вы завершили свою первую 2D-игру в Godot.
Вы сделали персонажа, управляемого игроком, врагов, случайно появляющихся на игровом поле, подсчёт очков, реализовали завершение и повтор игры, пользовательский интерфейс, звуки и многое другое. Поздравляем!
Вам еще многому предстоит научиться, но вы можете воспользоваться моментом, чтобы оценить то, чего вы достигли.
А когда вы будете готовы, вы сможете перейти к Ваша первая 3D игра , чтобы изучить создание полноценной 3D-игры с нуля в Godot.
© Copyright 2014-present Juan Linietsky, Ariel Manzur and the Godot community (CC BY 3.0). Revision 4f366a47 .
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 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?