Godot Version
4.2.1
Question
Hello,
I’d like to make a “fade out” effect when the player collides with some collider. Here is my fadeout script which is attached to a Panel
extends Panel
var style = StyleBoxFlat
var color
var tween: Tween
# Called when the node enters the scene tree for the first time.
func _ready():
style = preload("res://fadescreen.tres")
color = style.bg_color
tween = get_tree().create_tween()
#fade_out()
func fade_out():
tween.tween_property(style, "bg_color:a", 1, 0.15)
func _on_event_area_fade_out():
fade_out()
If called from _ready(), the fadeout will occur with no other problems. However, a problem occurs if called using a signal from the script attached to the Area2D…
extends Area2D
signal fade_out
var player = null
var playerset = false
var player_scene
func _ready():
get_player()
player_scene = preload("res://player.tscn")
func get_player():
player = get_node_or_null("/root/StartScene/FloorGroup/Player")
if player != null:
playerset = true
func _on_body_entered(body):
if body == player:
emit_signal("fade_out")
Trying to call from the signal gives a couple of errors:
E 0:00:00:0854 step: <Tween#-9223372004290198108>: started with no Tweeners.
<C++ Error> Method/function failed. Returning: false
<C++ Source> scene/animation/tween.cpp:319 @ step()
and
E 0:00:03:0497 fadescreen.gd:20 @ fade_out(): Tween invalid. Either finished or created outside scene tree.
<C++ Error> Condition "!valid" is true. Returning: nullptr
<C++ Source> scene/animation/tween.cpp:104 @ tween_property()
<Stack Trace> fadescreen.gd:20 @ fade_out()
fadescreen.gd:24 @ _on_event_area_fade_out()
Event.gd:32 @ _on_body_entered()
I can fix this by calling _ready() in response to the signal before calling fade_out(). Using that makes things work perfectly (for now) but I know it’s not the right thing to do, calling _ready() manually is probably not recommended. Furthermore, I’d just like to understand what’s going on a bit more by solving this problem .
Is there any insight you can offer into this? Also feel free to offer suggestions and corrections to other parts of the scripts.
Thanks for reading and thanks in advance for your replies.