Собственно вот результат, он же КДПВ:
Вообще-то я сделал, чтобы она отслеживала положение курсора, но мне не настолько понравился результат, чтобы делать видео, демонстрирующее сей процесс. (А ещё я операционку обновил, снеся ВСЕ свои файлы - задолбал мусор всякий, но все нужные программы пока не скачал...) Поэтому коротенько обьясню принцип: суть в том, что турелька сделана с помощью узла анимированного спрайта, в котором каждый фрейм является изображением повернутой на какой-то угол башни, конкретнее:
угол поворота = номер фрейма х 15 градусов
Всего сделал 24 картинки, естественно в Блендере, вот одна из них:
Дальше, понятно дело техники - посчитать угол поворота башни и выставить нужный фрейм. Ничего сложного. Изображение травы тоже делал в Блендере с помощью частиц.
Код для посмотреть, корявый и ужасный:
# 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
Комментариев нет:
Отправить комментарий