#python #python-3.x #pygame
#python #python-3.x #pygame
Вопрос:
Я новичок в Python и особенно новичок в Pygame. Работал над базовой игрой типа space invader, чтобы попытаться узнать больше о Pygame, но я не могу понять код для перемещения пользовательского корабля. Просмотрел несколько руководств по этому вопросу, и я ДУМАЮ, что мой код выглядит хорошо, но, возможно, я что-то просматриваю. Я нахожусь в Python версии 3.8 и Pygame версии 1.9.6.
'''
This script is creating a space invader type game with the Pygame module.
Tutorial following YT video from freecodecamp.org
(https://www.youtube.com/watch?v=FfWpgLFMI7wamp;ab_channel=freeCodeCamp.org)
'''
import sys
import pygame
# Initializing Pygame
# (ALWAYS REQUIRED)
pygame.init()
# Screen Dimensions
width = 800
height = 600
screen = pygame.display.set_mode((width, height))
# Other Game Settings
framerate = pygame.time.Clock()
framerate.tick(60)
# Setting Title and Images
pygame.display.set_caption('Space Invaders')
icon = pygame.image.load('spaceship.png')
pygame.display.set_icon(icon)
player_ship = pygame.image.load('space-invaders.png')
def player(x,y):
'''
Draws the player's ship on the screen at (x,y) coordinates.
'''
screen.blit(player_ship,(x, y))
# Game Function
def game():
'''
Actual code for the game itself.
'''
# Sets the starting position for the player's ship
playerX = 368 # Middle of Screen (on x-axis)
playerY = 506 # 30px off bottom of the screen (y-axis)
x_change = 0
# Game Loop
game_exit = False
while not game_exit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_exit = True
elif event.type == pygame.KEYDOWN:
if event.type == pygame.K_ESCAPE:
game_exit = True
elif event.type == pygame.K_d:
x_change = 5
elif event.type == pygame.K_a:
x_change = -5
elif event.type == pygame.KEYUP:
if event.key == pygame.K_d or event.key == pygame.K_a:
x_change = 0
playerX = x_change
print(x_change) # Using this to see if the script is recognizing the user keystrokes
# Setting Screen RGB
screen.fill((0,0,0))
player(playerX, playerY)
# Screen Update
# (ALWAYS REQUIRED)
pygame.display.update()
game()
pygame.quit()
sys.exit()
Спасибо за вашу помощь!
Комментарии:
1. Игра откроется и отобразит черный фон с изображением корабля пользователя, как я хочу, но затем, когда я использую клавиши «A» или «D» для перемещения корабля из стороны в сторону, он остается на месте и выводит значение x_change 0, как будто я ненажатие клавиш. Я попытался поменять местами ‘A’ и ‘D’ для разных буквенных клавиш, а также клавиш со стрелками, но это ничего не меняет, заставляя меня поверить, что это просто проблема с самим кодом, а не с конкретными клавишами, которые я использую для управления кораблем.
Ответ №1:
Проблема в том, что вы проверяете наличие event.type
of pygame.K_d
и т. Д.
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_exit = True
elif event.type == pygame.KEYDOWN:
if event.type == pygame.K_ESCAPE: # <-- HERE
game_exit = True
elif event.type == pygame.K_d: # <-- HERE
x_change = 5
elif event.type == pygame.K_a: # <-- AND HERE
x_change = -5
event.type
Не может быть равно обоим pygame.KEYDOWN
и pygame.K_d
одновременно!. Если вы проверите документацию по событию, обратите внимание, что отправляется код ключа event.key
, так что это простое исправление.
Клавиша нажатия клавиш, мод, юникод,
клавиша ввода сканкодов, мод
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_exit = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE: # <-- FIX HERE
game_exit = True
elif event.key == pygame.K_d: # <-- FIX HERE
x_change = 5
elif event.key == pygame.K_a: # <-- AND FIX HERE
x_change = -5
Комментарии:
1. Большое вам спасибо! Я знал, что это должно быть что-то, что пролетело у меня над головой. Я только что предположил, что у меня уже было правильное фактическое условие, и это была проблема с чем-то другим. Мне нужно убедиться, что я проверяю все в следующий раз. Ты спаситель!