问题描述
我的问题是,每当我使用字母进行击键时,它都不起作用。当我将击键更改为箭头键时,该代码有效,但如果我尝试使用 WASD,则该代码无效。我试过替换变量和许多其他东西,但它仍然不起作用。
这是我的代码:
import pygame
import os
pygame.init()
width = 1200
height = 800
FPS = 60
# Player 1
playerImg1 = pygame.image.load('spaceship1.png')
playerX1 = 200
playerY1 = 370
playerX_change1 = 0
playerY_change1 = 0
def player1(x1,y1):
window.blit(playerImg1,(x1,y1))
# Player 2
playerImg2 = pygame.image.load('spaceship2.png')
playerX2 = 800
playerY2 = 370
playerX_change2 = 0
playerY_change2 = 0
def player2(x2,y2):
window.blit(playerImg2,(x2,y2))
# gameLoop
running = True
clock = pygame.time.Clock()
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Keystrokes
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT: #left
playerX_change1 = -5
if event.key == pygame.K_RIGHT: #right
playerX_change1 = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT or event.key == pygame.K_RIGHT:
playerX_change1 = 0
playerX1 += playerX_change1
if playerX1 <= 0:
playerX1 = 0
elif playerX1 >= 400:
playerX1 = 400
window.blit(bg,(0,0))
player1(playerX1,playerY1)
player2(playerX2,playerY2)
pygame.display.update()
这是不起作用的代码:
import pygame
import os
pygame.init()
width = 1200
height = 800
FPS = 60
# Creating and naming the screen
window = pygame.display.set_mode((width,height))
name = pygame.display.set_caption("Duel")
# Player 1
playerImg1 = pygame.image.load('spaceship1.png')
playerX1 = 200
playerY1 = 370
playerX_change1 = 0
playerY_change1 = 0
def player1(x1,y2))
# gameLoop
running = True
clock = pygame.time.Clock()
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Keystrokes
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a: #left
playerX_change1 = -5
if event.key == pygame.K_d: #right
playerX_change1 = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_a or event.key == pygame.K_d:
playerX_change1 = 0
playerX1 += playerX_change1
if playerX1 <= 0:
playerX1 = 0
elif playerX1 >= 400:
playerX1 = 400
window.blit(bg,playerY2)
pygame.display.update()
```
解决方法
这是Indentation的问题。您必须在事件循环而不是应用程序循环中处理事件。
running = True
clock = pygame.time.Clock()
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# INDENTATION
#-->|
# Keystrokes
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a: #left
playerX_change1 = -5
if event.key == pygame.K_d: #right
playerX_change1 = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_d or event.key == pygame.K_a:
playerX_change1 = 0