воскресенье, 24 мая 2020 г.

Решил сделать турельку в изометрии.

Собственно вот результат, он же КДПВ:





Вообще-то я сделал, чтобы она отслеживала положение курсора, но мне не настолько понравился результат, чтобы делать видео, демонстрирующее сей процесс. (А ещё я операционку обновил, снеся ВСЕ свои файлы - задолбал мусор всякий, но все нужные программы пока не скачал...) Поэтому коротенько обьясню принцип: суть в том, что турелька сделана с помощью узла анимированного спрайта, в котором каждый фрейм является изображением повернутой на какой-то угол башни, конкретнее:

угол поворота = номер фрейма х 15 градусов

Всего сделал 24 картинки, естественно в Блендере, вот одна из них:
Дальше, понятно дело техники - посчитать угол поворота башни и выставить нужный фрейм. Ничего сложного. Изображение травы тоже делал в Блендере с помощью частиц.

Код для посмотреть, корявый и ужасный:

extends Node2D


# Declare member variables here. Examples:
# var a = 2
# var b = "text"
var turretPos = Vector2()
var mousePos = Vector2()
var localCursorPos = Vector2()
var angle = 0.0
var cursorFrame = 0



# Called when the node enters the scene tree for the first time.
func _ready():
    self.turretPos = self.get_node("TileMap").world_to_map(self.get_node("AnimatedSprite").position)

    pass # Replace with function body.


# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
    self.mousePos = get_node("TileMap").world_to_map(get_global_mouse_position())
    self.localCursorPos = self.mousePos - self.turretPos

    self.angle = rad2deg(localCursorPos.normalized().angle_to(Vector2(1.0, 0.0)))
    self.cursorFrame = int(angle/15.0)
    if self.cursorFrame > -1:
        self.get_node("AnimatedSprite").frame = self.cursorFrame
    else:
        self.get_node("AnimatedSprite").frame = 24 + self.cursorFrame



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

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