#python #python-3.x #pygame
#python #python-3.x #pygame
Вопрос:
import pygame
#initialize the screen
pygame.init()
#create the screen
screen = pygame.display.set_mode((800, 700))
#tile and icon
pygame.display.set_caption("Space Invaders")
icon = pygame.image.load("spaceship.png")
pygame.display.set_icon(icon)
#Player
playerImg = pygame.image.load("player.png")
playerx = 370
playery = 600
playerx_change = 0.39
def player(x,y):
screen.blit(playerImg, (x,y))
running = True
while running:
screen.fill((0,0,0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
#keystroke
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
playerx_change = -0.39
if event.key== pygame.K_RIGHT:
playerx_change = 0.39
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.type == pygame.K_RIGHT:
playerx_change = 0
playerx = playerx_change
player(playerx,playery)
pygame.display.update()
Мой космический корабль продолжает двигаться, даже когда я не нажимаю боковые клавиши. я создаю space invaders, используя python и pygame.корабль не останавливается, как это должно было быть в соответствии с кодом. я использую версию Visual Studio 2019 для сообщества.
Комментарии:
1. Я попробовал ваш метод, но когда я меняю его с key на type, я не могу переместить свой космический корабль в правую сторону, и он все еще не останавливается даже после того, как я отпускаю клавиши
Ответ №1:
В вашем коде есть опечатка, event.key == pygame.K_RIGHT
а не event.type == pygame.K_RIGHT
.
Более того, существует проблема с отступом:
running = True
while running:
# [...]
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
#keystroke
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
playerx_change = -0.39
if event.key== pygame.K_RIGHT:
playerx_change = 0.39
#<--| INDENTATION
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
playerx_change = 0
В любом случае я рекомендую использовать pygame.key.get_pressed()
, а не ключевые события для движения:
running = True
while running:
screen.fill((0,0,0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
playerx -= 0.39
if keys[pygame.K_RIGHT]:
playerx = 0.39
player(playerx,playery)
pygame.display.update()
Ключевые события KEYDOWN
и KEYUP
происходят один раз, когда клавиша нажата соответственно отпущена, но состояния, которые возвращаются с помощью pygame.key.get_pressed()
, являются True
такими, пока клавиша удерживается нажатой.