GodotФорумВопросы

Появление label при нажатии на кнопку и проигрывание Tween

#0
16:56, 7 июля 2024

Всем здравствуйте, делаю кликер на Godot 4.2.2
Хочу реализовать такое: После каждого нажатия на кнопку появляется label с текстом "+1", после чего для каждого из экземпляров проигрывается Tween(поднятие наверх, постепенно становиться прозрачным и удаляется). Думаю идея понятна, система как в любом кликере. Подскажите пожалуйста, как это сделать.

#1
19:13, 7 июля 2024

// ---
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
}

#2
23:02, 7 июля 2024

Ready, set, go!
> Подскажите пожалуйста, как это сделать.

Просто брать и делать, ровно как ты описал.
В чём конкретно проблема?

GodotФорумВопросы