0 / 0 / 0
Регистрация: 31.01.2018
Сообщений: 16
1

Godot AcceptWindow

15.10.2022, 02:20. Показов 972. Ответов 5
Метки нет (Все метки)

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

Перерыл много инфы, смог найти только OS.alert("...", "..."). Нужно такое же только, чтобы были кнопки "Да" и "Нет".
И помимо этих кнопок функция должна возвращать значение, в зависимости от выбранного ответа! Чтобы ее можно было упрощенно использовать:

if OS.<<функция окна подтверждения("Вы точно хотите удалить ...?")>>: $"...".queue_free()

Сразу говорю, реализация через отдельные всплывающие окна внутри приложения не подходят - они создают слишком много кода и это повторяется на каждом таком запросе для каждого отдельного случая. Нужен вариант проще, и мне кажется должно быть что-то что я описал выше..
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.10.2022, 02:20
Ответы с готовыми решениями:

Cocos2d-x или Godot
Не могу определиться с игровым движком. Сначала cocos заинтересовал но у меня с ним много вопросов,...

GODOT AudioStreamPlayer html5
Добрый день! Возникла проблема с проигрыванием звука в экспортированном экземпляре игры. Звук...

Godot. Движение игрока
Добрый вечер всем. Пытаюсь сейчас делать движение персонажа. Передвижение вправо срабатывает как...

Godot - звуки перемещения
Доброго времени суток всем участникам форума! Хочу узнать ваше мнение. Во время разработки игры на...

Силует след за персонажем в GODOT
При перетаскивании с помощью мыши на сцене есть след Trail (Particles2D) силует за персонажем. А...

5
Just Do It!
3837 / 2283 / 636
Регистрация: 23.09.2014
Сообщений: 7,051
Записей в блоге: 2
17.10.2022, 10:10 2
Цитата Сообщение от Error Folder Посмотреть сообщение
Сразу говорю, реализация через отдельные всплывающие окна внутри приложения не подходят - они создают слишком много кода и это повторяется на каждом таком запросе для каждого отдельного случая. Нужен вариант проще, и мне кажется должно быть что-то что я описал выше..
почему тогда не использовать глобальный Static Function?

Javascript
1
2
3
4
5
6
7
8
9
10
extends Node2D
 
class_name myGlobal
 
static func callAcceptDialog("Вы точно хотите удалить ...?") -> String:
    тут [URL="https://godot-doc.readthedocs.io/en/3.0/classes/class_acceptdialog.html#class-acceptdialog"]AcceptDialog[/URL]
 
    ...
 
    return "трололо";
далее callAcceptDialog можно вызывать из любого места кода программы,
и это будет занимать место просто как любой другой вызов функции.
0
0 / 0 / 0
Регистрация: 31.01.2018
Сообщений: 16
17.10.2022, 10:35  [ТС] 3
Я думал про него, но создает ли оно системное прерывание как "Alert"? Т.е. будет ли вся программа останавливаться, пока не будет что-либо нажато в диалоговом окне? Мои (не очень дотошные) эксперименты показали, что окно открывается, условия "if $Button.pressed == true: return false" выполняются с отрицательным исходом, выполнение кода идет дальше, функция схлапывается и все. В итоге получаем интерфейс, поверх которого просто открылось окно подтверждения, которое ни на что не реагирует. А нужно, чтобы при открытии окна, программа получала системное прерывание как "Alert" и ожидала пока не будет нажата одна из кнопок, а как только кнопка наждется, отработается соответсвующее условие или будет подан соответсвующий сигнал.

Добавлено через 7 минут
Я думал про него, но создает ли оно системное прерывание как "Alert"? Т.е. будет ли вся программа останавливаться, пока не будет что-либо нажато в диалоговом окне? Мои (не очень дотошные) эксперименты показали, что окно открывается, условия "if $Button.pressed == true: return false" выполняются с отрицательным исходом, выполнение кода идет дальше, функция схлапывается и все. В итоге получаем интерфейс, поверх которого просто открылось окно подтверждения, которое ни на что не реагирует. А нужно, чтобы при открытии окна, программа получала системное прерывание как "Alert" и ожидала пока не будет нажата одна из кнопок, а как только кнопка наждется, отработается соответсвующее условие или будет подан соответсвующий сигнал.

Так же пробовал засунуть "if $Button.pressed == true: return false" в цикл while - программа просто виснет и не отрисовывает даже это открытие этого окна.
Думал поставить "if $Button.pressed == true: return false" в _process и передать ему метку, чтобы при срабатывании условия выполнение кода возвращалось в ту часть программы от куда вызывалось диалоговое окно (такая механика реализована в CMD, метка ставится "X:" а переход к ней "goto X") но не нашел такого в GDscript
0
Just Do It!
3837 / 2283 / 636
Регистрация: 23.09.2014
Сообщений: 7,051
Записей в блоге: 2
17.10.2022, 10:56 4
Цитата Сообщение от Error Folder Посмотреть сообщение
будет ли вся программа останавливаться, пока не будет что-либо нажато в диалоговом окне?
Поставить приложение на паузу можно изменив свойство paused.
К примеру get_tree().paused = true — ставит на паузу всё приложение.

Цитата Сообщение от Error Folder Посмотреть сообщение
Думал поставить "if $Button.pressed == true: return false" в _process и передать ему метку, чтобы при срабатывании условия выполнение кода возвращалось в ту часть программы от куда вызывалось диалоговое окно (такая механика реализована в CMD, метка ставится "X:" а переход к ней "goto X") но не нашел такого в GDscript
это похоже на то, как если бы вы хотели в игольном ушке разместить саму иголку)
т.е. выйти из игры, но продолжать ею(игрой) управлять))
0
0 / 0 / 0
Регистрация: 31.01.2018
Сообщений: 16
17.10.2022, 11:00  [ТС] 5
Об этом мне тоже известно, но проблема отсутствия прерывания остается.
Пример функции.

Код
func ACCEPT(Str):
    $AceptDialog.visible = true
    if $AceptDialog/ButNo.pressed = true:
        return false
        $AceptDialog.visible = false
    if $AceptDialog/ButYeo.pressed = true:
        return true
        $AceptDialog.visible = false
Понимаете о чем я? У этой функции нет возможности ждать пока пользователь нажмет какую-то кнопку. Она запустится тут же проверит не нажато ли что-то и завершится
0
Just Do It!
3837 / 2283 / 636
Регистрация: 23.09.2014
Сообщений: 7,051
Записей в блоге: 2
17.10.2022, 11:10 6
Цитата Сообщение от Error Folder Посмотреть сообщение
У этой функции нет возможности ждать пока пользователь нажмет какую-то кнопку. Она запустится тут же проверит не нажато ли что-то и завершится
а эта ConfirmationDialog?

мне щас лень тестить.

Цитата Сообщение от Error Folder Посмотреть сообщение
Понимаете о чем я?
относительно конечной вашей цели, разумеется, нет.

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

а дёргать что-то мёртво привязанное к конкретной ОС это костыльный говнокодинг для такого движка, как Годот.

хз, я про крайний случай ...
0
17.10.2022, 11:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2022, 11:10
Помогаю со студенческими работами здесь

Вращение объекта мышью в Godot
Привет всем! Чтобы было короче: представьте себе Google Earth с максимально отдаленной планетой. Вы...

O3DE или Godot Engine?
Мне предстоит разрабатывать систему 3D-визуализации, отображающую мир (открытое пространство с...

Поворот вектора в 3д пространстве в движке GODOT
Я пишу игру в движке GODOT. И мне требуется повернуть вектор импульса, действующего на объект в...

Использование мыши для прицела в 3д игре на GODOT
Как можно получить 3д координаты мыши? Или как ещё можно использовать мышь, для прицеливания в...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru