当我运行该程序时,Player类的更新部分不起作用。它显示图片,但是当按下按键时,我无法将它向右或向左移动。它保持不动。我错过了什么?当按下按键时Pygame图像不移动
import pygame
import random
import os
pygame.init()
pygame.mixer.init()
display_width = 460
display_height = 600
FPS = 30
#colors
white = (255,255,255)
black = (0,0,0)
red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
game_display = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption("Test")
clock = pygame.time.Clock()
img_dir = os.path.join(os.path.dirname(__file__), 'img')
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.transform.scale(player_img, (40,60))
self.image.set_colorkey(black)
self.rect = self.image.get_rect()
self.rect.centerx = display_width/2
self.rect.bottom = display_height - 10
self.speedx = 0
def update(self):
self.speedx = 0
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a or event.key == pygame.K_LEFT:
self.speedx = -7
if event.key == pygame.K_d or event.key == pygame.K_RIGHT:
self.speedx = 7
self.rect.x += self.speedx
#image loading
player_img = pygame.image.load(os.path.join(img_dir, "malirozi.png")).convert()
all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)
#game loop
running = True
while running:
#Events
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
#Logic
all_sprites.update()
#Draw/render
game_display.fill(black)
all_sprites.draw(game_display)
#after drawing everything, flip the display
pygame.display.flip()
clock.tick(FPS)
pygame.quit()
quit()
我猜你的事件处理逻辑是不正确的。通常情况下,您应该只有一个调用'pygame.event.get()'的“顶级”循环,然后将事件传递给关心它们的对象。现在,我猜你的箭头按键被循环所吞噬,寻找'pygame.QUIT'。另外,也许你在'update()'函数后面的内容是检查并查看当前按下的键,而不是寻找关键的向上/向下事件。 –