_ready() is called once a node (and it's children) are loaded. I assume it is being added to the scene earlier than other nodes due to a delay? Perhaps it's generally not safe to start things assuming others will start at the same time?
Godot
Welcome to the programming.dev Godot community!
This is a place where you can discuss about anything relating to the Godot game engine. Feel free to ask questions, post tutorials, show off your godot game, etc.
Make sure to follow the Godot CoC while chatting
We have a matrix room that can be used for chatting with other members of the community here
Links
Other Communities
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
Rules
- Posts need to be in english
- Posts with explicit content must be tagged with nsfw
- We do not condone harassment inside the community as well as trolling or equivalent behaviour
- Do not post illegal materials or post things encouraging actions such as pirating games
We have a four strike system in this community where you get warned the first time you break a rule, then given a week ban, then given a year ban, then a permanent ban. Certain actions may bypass this and go straight to permanent ban if severe enough and done with malicious intent
Wormhole
Credits
- The icon is a modified version of the official godot engine logo (changing the colors to a gradient and black background)
- The banner is from Godot Design
There is a specific order that _enter_tree and _ready get called in. When the nodes enter the tree, _enter_tree is called in descending order, when all the nodes have called that, _ready calls begin in ascending order.
Thus, a child's _ready callback is called before its parent's. But the parent has _enter_tree called first.
But I don't think this is the issue here.
Yeah, the music and animation stuff all is triggered on the highest level parent scene, so it should be loaded at the very end.
It's also curious that the music starts during the splash screen while the animation loads properly after everythin's been loaded even if the music is called by the animation.
You can wait untill everything is ready to start music in sync with animations. You'd probably put it in _process and wait for a signal or poll tree until it says it's ready.
Well I have something like:
func _ready():
$AnimationPlayer.queue("1-1-1")
$AnimationPlayer.queue("1-1-2")
func _on_animation_player_animation_started(anim_name):
if (anim_name == "1-1-1"):
$Audio/ReadySetGo.play()
pass
I don't know what else could be done
You don't have Autoplay checked for the AudioStreamPlayer[2D|3D] node, do you? (Sorry for the obvious question, but we out here on the net never know.)
No, autoplay is off
Found this question on AskGodot. https://ask.godotengine.org/60353/how-to-wait-the-whole-scene-load-to-execute
I didn't quite understand what the answer was on about. A reddit thread (linked to using Await)[https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html#awaiting-for-signals-or-coroutines], but offered no further details
I've also found this tutorial for Background Loading, maybe it can help you? https://docs.huihoo.com/godotengine/godot-docs/godot/tutorials/engine/background_loading.html
As for the significant difference in load time on linux, that's really head scratching. Similar enough graphics cards on both? What render are you using? OpenGL, Vulkan?
Hmm neither of these suggestiona seem to be applicable to me ๐ฅฒ.
As for the performance differenece, In the mean time I've tried out many different changes and now the load time difference seems to be proportional to the fps (around 10x difference for context(3060ti vs vega 8)).
Perhaps that's thanks to caching or something similar as I tested on a lightly used Fedora install.
Sounds like you found a workaround.
There might be some tricks here that could help too:
https://docs.godotengine.org/en/stable/tutorials/audio/sync_with_audio.html