Всем здравствуйте, делаю кликер на Godot 4.2.2
Хочу реализовать такое: После каждого нажатия на кнопку появляется label с текстом "+1", после чего для каждого из экземпляров проигрывается Tween(поднятие наверх, постепенно становиться прозрачным и удаляется). Думаю идея понятна, система как в любом кликере. Подскажите пожалуйста, как это сделать.
// ---
Tweens are AMAZING in Godot 4
https://www.youtube.com/watch?v=sJQydvy3uT8
// ---
Создать новую сцену, и кликнуть белый крестик, в боковом пано Scene,
под тремя кружками (синий, красный, зелёный, и белый крестик).
Напечатать буквы "Lab", выбрать вариант-строку Label, клик на Create.
Поменять название ноды - на нечто "lab_fly_up", сохранить Save as,
под имя ноды. После этого, добавить одно-имёный скрипт.
// скрипт сохранится рядом, если не менять _путь.
// И внедряем туда такой текст..
{
extends Label
func _ready():
if text.is_empty():
text = "test"
var fin_y = self.position.y - 100.0
if fin_y < 1.0:
fin_y = 0.0
var za_skoko_sec := 1.5
var tw = get_tree().create_tween().set_parallel( true)
tw.tween_property( self, "position:y", fin_y, za_skoko_sec)
tw.tween_method( clr_a, 1.0, 0.0, za_skoko_sec)
func clr_a( an1_to_0):
self.self_modulate.a = an1_to_0
if an1_to_0 < 0.0001:
print( "lab_fly out")
queue_free()
}
После этого, где-то в другом скрипте, аля player.gd
надо вызывать создание пре-загружэного лэйбла..
{
func on_signal():
# test..
lab_fly_test( randi_range( 0, 2) * 100, randi_range( 1, 6) )
var lab_fly_res = preload( "res://an/lab_fly_up.tscn")
func lab_fly_test( y: float, i: int, krit: int = 0):
var n = get_parent()
print( n.name)
n = n.get_node_or_null( "CanvasLayer")
# нужно найти ноду, которая _опорная для всяких дву-мерных лэйблов.
if not n:
print( "lab_fly_test not Layer")
return # не нашли такую
var lab_fly = lab_fly_res.instantiate()
if lab_fly:
print( "ok fly")
lab_fly.position.x = 300
lab_fly.position.y = y
if krit:
lab_fly.text = "< %d >" % i
else:
lab_fly.self_modulate = Color( 0.5, 0.5, 0.5)
lab_fly.text = "%d" % i
n.add_child( lab_fly) # должна сработать функция _ready
}
Ready, set, go!
> Подскажите пожалуйста, как это сделать.
Просто брать и делать, ровно как ты описал.
В чём конкретно проблема?
Тема в архиве.