[英]My player is glitching back and fourth and I don't know why
我有一个 2d 游戏,其中敌人精灵在 x 轴上跟随玩家。 如果玩家在其右侧,则敌人面朝右侧并跟随玩家向右移动,如果玩家在其左侧,则敌人向右移动。 但有时,如果我停止移动玩家并让敌人靠近它,它应该停下来,面向左侧,让我的玩家受到伤害,但有时它只是开始同时极快地面向右侧和左侧。 为什么?
这是我的代码
# Import Libraries here...
import random
import pygame
from sys import exit
import random
from random import randrange
from time import sleep
pygame.init()
clock = pygame.time.Clock()
# Background Music
bg_music = pygame.mixer.Sound('music_zapsplat_astro_race.mp3')
bg_music.play(loops=-1)
bg_music.set_volume(0.3)
# Screen/background
screen = pygame.display.set_mode((1200, 535))
background = pygame.image.load("background1.jpg")
background = pygame.transform.rotozoom(background, 0, 2)
# Player
player_surf = pygame.image.load("player_sprites/player_right.png").convert_alpha()
player_rect = player_surf.get_rect(bottomright = (575, 470))
player_surf = pygame.transform.rotozoom(player_surf, 0, 2.5).convert_alpha()
# Health...
health = 50
health_font = pygame.font.Font('Pixeltype.ttf', 50)
health_display = health_font.render(f"Health {health}", True, (0, 0, 0))
# Enemy #1
enemy1_hp = 10
enemyx_position = randrange(1200, 1500)
enemy1_surf = pygame.image.load("enemy1sprites/enemy1_right.png").convert_alpha()
enemy1_rect = enemy1_surf.get_rect(bottomleft = ((enemyx_position), 462))
enemy1_surf = pygame.transform.rotozoom(enemy1_surf, 0, 2.5).convert_alpha()
# Game Loop
level_one = True
while level_one:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
# Draw Images on the screen
screen.blit(background, (0, 0))
screen.blit(enemy1_surf, enemy1_rect)
screen.blit(player_surf, player_rect)
screen.blit(health_display, (550, 75))
# Player Movement
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player_surf = pygame.image.load("player_sprites/player_left.png")
player_surf = pygame.transform.rotozoom(player_surf, 0, 2.5)
player_rect.x -= 4
if event.key == pygame.K_RIGHT:
player_surf = pygame.image.load("player_sprites/player_right.png")
player_surf = pygame.transform.rotozoom(player_surf, 0, 2.5)
player_rect.x += 4
# Window Edge
if player_rect.x >= 1075:
player_rect.x = 1075
elif player_rect.x <= 0:
player_rect.x = 0
# Enemy 1 AI
if player_rect.x != enemy1_rect.x:
if player_rect.x > enemy1_rect.x:
enemy1_surf = pygame.image.load("enemy1sprites/enemy1_right.png")
enemy1_surf = pygame.transform.rotozoom(enemy1_surf, 0, 2.5)
enemy1_rect.x += 2
elif player_rect.x < enemy1_rect.x:
enemy1_surf = pygame.image.load("enemy1sprites/enemy1_left.png")
enemy1_surf = pygame.transform.rotozoom(enemy1_surf, 0, 2.5)
enemy1_rect.x -= 2
# Collision with enemy
if player_rect.x == enemy1_rect.x:
enemy1_surf = pygame.image.load("enemy1sprites/enemy1_left.png")
enemy1_surf = pygame.transform.rotozoom(enemy1_surf, 0, 2.5)
health -= 0.03
print(int(health))
health_display = health_font.render(f"Health {int(health)}", True, (0, 0, 0))
pygame.display.update()
# Player Attacking
if player_rect.x >= enemy1_rect.x + 200:
print("test")
elif player_rect.x <= enemy1_rect.x - 200:
print('test')
# Attacking
else:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN:
enemy1_hp -= 1
pygame.display.update()
clock.tick(60)
我期待看到它一直工作,但有时它会工作,大约 25%-50% 的时间它不会......
敌人总是移动2,所以如果到目标的距离小于2,你必须停止移动敌人。因此,只有当到玩家的距离大于或等于2时才移动敌人:
if player_rect.x.= enemy1_rect:x:
if abs(player_rect.x - enemy1_rect.x) >= 2:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.