Найти тему

№110. Рисуем и двигаем текстуры при помощи Draw()

Помимо рисования примитивов типа круг, квадрат, линия и так делее, годо дает нам возможность рисовать текстуры.
Есть несколько методов для отрисовки текстур (
draw_texture_rect(), draw_texture_rect_region()), но в этой статье мы будем использовать метод draw_texture(). Он принимает такие параметры как ресурс текстуры, позиция, размер, цвет и карта нормалей.

Функцию draw() обычно используют например для отрисовки всякого рода элементов интерфейса с которым нам не надо взаимодеиствовать, или фонов для уровней.
Так как процесс не связан с созданием нод, это сильно оптимизирует нагрузку на память и процессор.

Пример фона с использованием нескольких текстур и анимации:

Вращение текстуры:

-2

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

Итак, всё что нам потребуется — это сцена, и скрипт.
Создаем 2Д сцену (
рисовать можно только на нодах наследующих класс CanvasItem), подключаем скрипт и пишем следующее :

-3

Выносим текстуру в переменную, и в функции Draw() указываем данные : текстура, позиция, цвет и по желанию текстура нормалей.
После запуска приложения увидим нашу текстуру на экране в координатах 100х100.

-4

Можно заметить что в аргументах функции нет ничего чтобы помогло нам как то повернуть, или поменять размеры текстуры.
Для этого мы должны использовать функцию
draw_set_transform(). Которая как раз и принимает значения позиции, поворота и размера.

Допишем скрипт :

Трансформ должен быть всегда НАД элементом который нам надо трансформировать.
Трансформ должен быть всегда НАД элементом который нам надо трансформировать.

Получим повернутую на 45 градусов и увеличенную в два раза текстуру :

-6

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

-7
-8

Трансформации деиствуют по принципу «наложения». Это значит что если мы положим текстуру, потом применим трансформ, то он применится только к низлежащей текстуре.

-9

На этом всё. Удачи !
Если остались вопросы :
Чат , Дискорд.

#godot #gdscript #игровой движок #программирование