繁体   English   中英

我的播放器出现倒退和第四次故障,我不知道为什么

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM