Hallo ich programmiere gerade ein Spiel in Pygame das dem Spiel Vampire Survivors ähnelt ich habe aktuell das problem das Problem das wenn der spieler auf die Gegner hinzu läuft die Gegener nach hinten verschoben werden staat nach vorn weil.
Also aktuell wenn ich stehe laufen die Gegner auf mich zu.
Und wenn ich von den Gegnern weg laufe werden sie aus dem Screen geschoben.
Aber wenn ich auf sie zu laufe werden sie auch aus dem Screen geschoben.
Obwohl sie dann normal laufen sollen als ob der spieler steth hier der wichtige code: def update(self, dt, player, screen_width, screen_height):
if not self.collided_with_enemy and self.is_visible:
dx = player.x - self.x
dy = player.y - self.y
distance = max(1, pygame.math.Vector2(dx, dy).length())
direction = pygame.math.Vector2(-dx / distance, -dy / distance)
player_rect = pygame.Rect(player.x, player.y, player.hitbox_width, player.hitbox_height)
enemy_rect = pygame.Rect(self.x, self.y, self.hitbox_width, self.hitbox_height)
if player_rect.colliderect(enemy_rect):
player.handle_collision()
self.speed = 0
return
if dx != 0 and dy != 0:
dx = 0
dy = 0
speed_multiplier = self.speed * dt
if player.is_moving:
speed_multiplier *= 0.5
# Anpassung der Bewegungsrichtung basierend auf dem Spielerstatus
if player.is_moving:
self.x -= direction.x * speed_multiplier
self.y -= direction.y * speed_multiplier
else:
self.x += direction.x * speed_multiplier
self.y += direction.y * speed_multiplier
self.x = max(-self.hitbox_width, min(self.x, screen_width))
self.y = max(-self.hitbox_height, min(self.y, screen_height))
self.animation_timer += dt
if self.animation_timer >= self.animation_speed:
self.animation_timer = 0
self.current_frame = (self.current_frame + 1) % self.animation_frames
# Anpassung der Geschwindigkeit basierend auf der Bewegungsrichtung des Spielers
player_direction = pygame.math.Vector2(player.x - self.x, player.y - self.y)
player_distance = max(1, player_direction.length())
player_direction = player_direction.normalize()
dot_product = player_direction.dot(direction)
if dot_product > 0.5:
# Spieler bewegt sich dem Gegner entgegen
self.speed = self.original_speed + 100
else:
# Spieler bewegt sich vom Gegner weg
self.speed = self.original_speed - 100
else:
self.x += self.direction * self.speed * dt
self.collided_with_enemy = False
for enemy in enemies:
if check_enemy_collision(player, enemy):
break