|
|
|
|
Reply From: |
AndyCampbell |
Do you want EXISTING enemies to disappear for 2 seconds and then appear again?
In this case, you can loop through all enemies and set the “visible” property to false, wait 2 seconds, then set it true again 2 seconds later. You could do that before and after your change_scene call. To do this, I would probably add a hide() function on your enemy. You can call that when you loop over each enemy. That function will set the enemy visible to false, then start a 2 second time which will call a function to set visible to true again.
or
Do you want to delay spawning NEW enemies for 2 seconds?
For that case, in the function that adds your enemy to the tree, just use another yield delay like you used before
yield(get_tree().create_timer(2.0), “timeout”)
Enemy Script:
func _ready() -> void:
get_node("Node2D").connect("Player1_pressed", self, "_on_Player1_pressed")
func _on_Player1_pressed():
yield(get_tree().create_timer(2.0), "timeout")
get_node("Enemy1sprite").set_hidden(!get_node("Enemy1sprite").is_hidden())
What am i doing wrong?
Try this
Put this in your enemy script
func hide_for_time(t):
visible = false
yield(get_tree().create_timer(t), "timeout")
visible = true
Put this in your existing function
func _on_Player1_pressed():
get_node("Enemy1sprite").hide_for_time(2.0)
That assumes Enemy1sprint is a child of the node where this script is running. If that is not true you need to change the NodePath in get_node to the correct path.
But remember you want to do this for all the Enemy
One option is put them all in a Group, then call a hide function on every Enemy.
Details of Groups here
Or, probably better you can use a signal for this. You could create a “level_completed” signal. The Main script could react to that by changing the level, and each Enemy could react to that by hiding for 2 seconds. You can watch a good tutorial about signals here
AndyCampbell | 2020-11-17 15:45
Enemy2 Script: (because if Player1 is pressed 2,3,4 should disappear)
signal level_complete1
func _ready() -> void:
$Enemy2sprite.connect("Player1_pressed", self, "_on_Player1_pressed")
# I've connected the Player1_pressed signal in this Script again, it is also connected in a different function in the main script. Can you use this signal in more than 1 func? it should be right?
func hide_for_time(t):
visible = false
yield(get_tree().create_timer(t), "timeout")
visible = true
func _on_Player1_pressed():
emit_signal("level_complete1")
then the signal goes to the Main Script: (right?)
var Enemy2lvl = preload("res://Enemy/Enemy2.tscn")
func _on_wanted1_pressed():
Enemy2lvl.connect("level_complete1", self, "_on_level_complete1")
func _on_level_complete1():
get_node("Enemy2sprite").hide_for_time(2.0)
#but the Enemy2sprite is not in the Main Scene, it’s in the Enemy Scene, but i used a signal shouldn’t it work?
i have also tried this:
func _on_level_complete1():
Enemy2lvl.hide_for_time(2.0)