system
July 13, 2021, 8:58pm
1
Attention
Topic was automatically imported from the old Question2Answer platform.
Asked By
Sabir_The_Trubbish
Here is my code
extends Navigation2D
var speed = -0.2
var velocity = Vector2.ZERO
var spawnX = RandomNumberGenerator.new()
var score = 0
func ready():
pass
func _process(delta):
move_local_x(speed)
func enemySpawn():
spawnX.randomize()
var xSpawn = spawnX.randf_range(-720.0, 1000.0)
var Enemy = load(“res://Enemy/Enemy.tscn”)
var enemy = Enemy.instance()
get_parent().add_child(enemy)
func _on_Hurtbox_area_entered(area):
score = score + 1
queue_free()
print(score)
Can you describe exact task?
p.s. randomize()
should be called only once, at startup, like in _ready()
.
The same about var Enemy = load("res://Enemy/Enemy.tscn")
, unless you load different scenes: you load it once and instance()
and add_child()
at the spawn moment.
sash-rc | 2021-07-13 21:21
I need to use the random numbers generated to make the x and y positions randomized.
Sabir_The_Trubbish | 2021-07-13 21:23
Please indent your code by wrapping with <pre><code>my code</code></pre>
and indent properly
clemens.tolboom | 2021-07-14 15:33
Ok, I will keep that in mind for later
Sabir_The_Trubbish | 2021-07-14 15:34
system
July 14, 2021, 3:41pm
2
Reply From:
clemens.tolboom
You can use yield with timer and a loop. Note I reuse your rng . Guess you need some more logic to prevent multiple enemies?
...
var player_dead :bool = false
....
func start_spawning():
while not player_dead:
var random_delay : float = spawnX.randfrange(0.1, 2.0)
yield(get_tree().create_timer(random_delay), "timeout")
enemySpawn() # create one enemy
I used your code and the game started to crash when the enemy was destroyed. I added randomized Y positions to the RNG.
extends Navigation2D
var speed = -0.2
var velocity = Vector2.ZERO
var spawnX = RandomNumberGenerator.new()
var spawnY = RandomNumberGenerator.new()
var score = 0
func ready():
pass
func _process(delta):
move_local_x(speed)
func enemySpawn():
spawnX.randomize()
spawnY.randomize()
var xSpawn = spawnX.randf_range(720.0, 1000.0)
var ySpawn = spawnY.randf_range(80.0, 290)
var Enemy = load("res://Enemy/Enemy.tscn")
var enemy = Enemy.instance()
enemy.x = xSpawn
enemy.y = ySpawn
get_parent().add_child(enemy)
var player_dead :bool = false
func start_spawning():
while not player_dead:
var random_delay : float = spawnX.randfrange(0.1, 2.0)
yield(get_tree().create_timer(random_delay), "timeout")
func _on_Hurtbox_area_entered(area):
enemySpawn()
start_spawning()
score = score + 1
queue_free()
print(score)
Sabir_The_Trubbish | 2021-07-14 16:00
I forgot to spawn enemies so updated my answer.
func _on_Hurtbox_area_entered(area):
player_dead = false
player_in_hurtbox = true
start_spawning()
score = score + 1
# queue_free()
print(score)
Your code is doing queue_free()
when entering (guess that is the crash) … that is not logical is it? Guess that is for _area_exited
. My player_dead
should be named player_in_hurtbox
func _on_Hurtbox_area_exited(area):
# player_dead = true
player_in_hurtbox = false
score = score + 1
queue_free()
print(score)
clemens.tolboom | 2021-07-14 19:59
system
July 14, 2021, 4:13pm
3
Reply From:
sash-rc
I need to use the random numbers generated to make the x and y positions randomized.
onready var randomGen : RandomNumberGenerator = RandomNumberGenerator.new()
onready var prototype : PackedScene = load("res://scene.tscn")
func _ready() -> void:
randomGen.randomize()
func spawn() -> void:
var pos : Vector2 = Vector2(randomGen.randf_range(-100, 100), randomGen.randf_range(-100, 100))
var spawnedItem : Node2D = prototype.instance()
get_parent().add_child(spawnedItem)
spawnedItem.position = pos