Godot Version
4.2.2
Question
I have a problem with my enemy’s sprite not flipping. It worked before but now whn I try loading the enemy from a object (Like a enemy spawner) it doesn’t work.
My enemy’s code:
extends CharacterBody2D
var receives_knockback: bool = true
var knockback_modifier: float = 3
var knockback_velocity := Vector2.ZERO
var ACCELERATION = 1500
var FRICTION = 60000
var SPEED = 800.0
var SPEEDLESS = 200.0
var SPEEDLESSes = 100.0
var loopy = 3
var goofy = 1
var othergoofy = 0
var stop = true
var dizzy = 0
var motion = false
var breaking = false
var motionstart = false
var motionend = false
var death = false
var idle = true
var deathcounter = 4
var hit = false
@onready var rollyaway = $ROLLY
# Get the gravity from the project settings to be synced with RigidBody nodes.
@onready var player = get_parent().get_parent().get_parent().get_node("Player")
@onready var playerpos = global_position.direction_to(player.global_position)
@onready var rng = RandomNumberGenerator.new()
@onready var my_random_number = rng.randf_range(1, 100)
func _process(delta):
pass
func _physics_process(delta):
if(player.position.x - position.x) > 0:
$Sprite2D.flip_h = true
elif(player.position.x - position.x) < 0:
$Sprite2D.flip_h = false
if knockback_velocity.is_zero_approx() == false:
velocity = knockback_velocity
move_and_slide()
knockback_velocity = Vector2.ZERO
return
velocity = velocity.move_toward(Vector2.ZERO, 200 * delta)
move_and_slide()
if hit == true:
$AnimationPlayer.play("flash")
await get_tree().create_timer(0.8).timeout
hit = false
if deathcounter == 0:
death = true
if death == true:
queue_free()
move_and_slide()
if motion == true and motionend == false and idle == false:
$AnimationPlayer.play("rollrollypoly")
elif motionstart == true and idle == false:
$AnimationPlayer.play("startrollypoly")
elif motionend == true and idle == false:
$AnimationPlayer.play("endrollypoly")
elif breaking == true and idle == false:
$AnimationPlayer.play("dizzyrollypoly")
elif idle == true and motionstart == false:
$AnimationPlayer.play("idlerollypoly")
if rollyaway.is_colliding():
velocity += rollyaway.get_pushed() * 60000
if stop == false:
$Area2D.monitoring = true
$Area2D.monitorable = true
playerpos = global_position.direction_to(player.global_position)
velocity.x += (playerpos.x * SPEED) * delta
velocity.y += (playerpos.y * SPEED) * delta
await get_tree().create_timer(2).timeout
motion = false
motionend = true
await get_tree().create_timer(0.45).timeout
motionend = false
stop = true
else:
$Area2D.monitoring = false
$Area2D.monitorable = false
playerpos = global_position.direction_to(player.global_position)
velocity = velocity.move_toward(Vector2.ZERO, FRICTION * delta)
idle = true
await get_tree().create_timer(2).timeout
idle = false
motionstart = true
await get_tree().create_timer(0.50).timeout
motion = true
stop = false
motionstart = false
func receive_knockback(damage_source_pos: Vector2):
if receives_knockback:
var knockback_direction = damage_source_pos.direction_to(self.global_position)
var knockback_strength = knockback_modifier * 100
knockback_velocity = knockback_direction * knockback_strength
func _on_hurtbox_area_entered(area):
if area.is_in_group("Slash") and stop == true:
deathcounter -= 1
hit = true
receive_knockback(area.global_position)
pass # Replace with function body.
My Spawner’s Code:
extends RigidBody2D
var cooldown = true
var ball_speed = Vector2(200,200)
@onready var rolly = preload("res://Rollypoly.tscn")
func _process(delta):
pass
func _physics_process(delta):
##var collision_info = move_and_collide(ball_speed * delta)
##if collision_info:
##ball_speed = ball_speed.bounce(collision_info.get_normal())
pass
func _on_timer_timeout():
cooldown = false
if cooldown == false:
var r = rolly.instantiate()
r.position = $Marker.position
add_child(r)
cooldown = true
pass # Replace with function body.
Any help would be apperciated!





