#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()