Проигрыватель Pygame не движется

#python #pygame

#питон #пигмея #python

Вопрос:

Я создаю игру, в которой игрок перемещается влево и вправо. Однако, в моем приведенном ниже коде, плеер может быть перемещен. Кто-нибудь может сказать мне, почему спрайт player1 не движется? Он появляется на игровом экране, но игрок не двигается влево или вправо, когда я нажимаю клавиши перемещения.

Код:

 import pygame
import sys

pygame.init()

game_screen = pygame.display.set_mode((600, 600))
pygame.display.set_caption("Whiskey Goggles")

bg = pygame.image.load("bg.png")
bg_image = pygame.transform.scale(bg, (600, 600))

class Player:

    def __init__(self, image_path, width, height, x, y):

        self.image_path = image_path
        self.width = width
        self.height = height
        self.x = x
        self.y = y

        player = pygame.image.load(image_path)
        self.player_main = pygame.transform.scale(player, (width,height))

    def draw(self, background):

        background.blit(self.player_main, (self.x, self.y))

#Main game

game_on = True
while game_on:

    clock = pygame.time.Clock() 
    clock.tick(60)

    direction = 0

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_on = False
            pygame.quit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                direction = 1
            elif event.key == pygame.K_LEFT:
                direction = -1
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:
                direction = 0

    game_screen.fill((0,0,0))
    game_screen.blit(bg_image, (0,0))

    player1 = Player("glass.png", 70, 70, 25, 500)
    player1.draw(game_screen)

    if direction > 0:
        player1.x = player1.x   10
    elif direction < 0:
        player1.x = player1.x - 10

    pygame.display.update()

quit()
  

Комментарии:

1. Базовым классом (от которого в конечном итоге наследуются все классы) для всех классов в python является object , поэтому создание класса с именем Object , вероятно, не лучший выбор. Это не ваша проблема, просто наблюдение.

2. Как сказал Гленн Макинтош; используйте описательные имена. Если класс создает проигрыватель, то назовите класс Player .

Ответ №1:

Вы создаете нового игрока в каждом цикле на одной и той же позиции (и сбрасываете direction ). Создайте его вне цикла.

 game_on = True
player1 = Object("glass.png", 70, 70, 25, 500)  # Create the player here instead.
direction = 0  # The same with direction.
while game_on:

    clock = pygame.time.Clock() 
    clock.tick(60)

    # direction = 0 Don't reset the direction every loop.

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_on = False
            pygame.quit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                direction = 1
            elif event.key == pygame.K_LEFT:
                direction = -1
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:
                direction = 0

    game_screen.fill((0,0,0))
    game_screen.blit(bg_image, (0,0))

    # player1 = Object("glass.png", 70, 70, 25, 500)  # Don't do this.
    player1.draw(game_screen)

    if direction > 0:
        player1.x = player1.x   10
    elif direction < 0:
        player1.x = player1.x - 10

       
    pygame.display.update()