среда, 25 марта 2020 г.

Сигналы.

   Итак, разобрался с подключением/отключением сигналов, как и хотел. Оказалось просто. 




    Сигналы - вещь нужная и полезная. Полезная тем, что позволяет вызвать функцию в скрипте другого объекта, что позволяет окольными путями, а не напрямую изменять параметры, например, как это было реализовано в недавнем примере турельки:
    target.get_node('Sprite3').visible = true
А если бы обьект, который target, того, .queue_free()? Была бы ошибка. А сигналы как раз позволяют избежать подобного, они просто отправляются, а есть там кто, способный их принять или нет - неважно. Прямо как в том анекдоте:
 Сисадмин в армии. Идет учебная стрельба. Сисадмин отстрелялся и ему объявляют результат:
- Всё мимо!
Админ удивился, почесал репу, проверил магазин автомата, посмотрел в ствол и говорит:
- Ну что я могу сказать… - от меня пули вышли. Значит неполадки на принимающей стороне..
Собственно, вот пример:

Signals.7z (~430 kB)

Управление: стрелочки влево/вправо.
На картинке видно, что в сцене есть пять "ботов" и один прогресс бар:


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


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






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

Отправить комментарий