在 Pygame 中,我们需要使特定精灵在用户按下某个键时连续移动。但是,当前存在一个问题:精灵在按下指定键后仅移动一次,然后停止。
2. 解决方案
为了解决上述问题,我们需要在 Pygame 中使用事件处理来监听键盘输入。当用户按下某个键时,我们需要更新精灵的位置,使其持续移动。
代码示例
import pygame
import sys
import os
import random
import time
from pygame.locals import *
pygame.init()
white = ( 255, 255, 255 )
black = ( 0, 0, 0 )
screenw = 800
screenh = 600
screen = pygame.display.set_mode( ( screenw, screenh ) )
pygame.display.set_caption( "Game" )
clock = pygame.time.Clock()
class Car(pygame.sprite.Sprite):
def __init__( self, color = black, width = 100, height = 100 ):
pygame.sprite.Sprite.__init__( self )
self.image = pygame.Surface( ( width, height ) )
self.image.fill( color )
self.rect = self.image.get_rect()
def set_pos(self, x, y):
self.rect.x = x
self.rect.y = y
def set_img( self, filename = None):
if filename != None:
self.image = pygame.image.load( filename )
self.rect = self.image.get_rect()
def main():
x_change = 0
y_change = 0
x = 0
y = 0
car_group = pygame.sprite.Group()
player = Car()
player.set_img( "images.jpg" )
car_group.add( player )
exit = False
FPS = 60
while not exit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_change = -10
elif event.key == pygame.K_RIGHT:
x_change = 10
elif event.key == pygame.K_UP:
y_change = -10
elif event.key == pygame.K_DOWN:
y_change = 10
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_UP or event.type == pygame.K_DOWN:
x_change = 0
y_change = 0
x += x_change
y += y_change
screen.fill( white )
player.set_pos( x, y )
car_group.draw( screen )
clock.tick( FPS )
pygame.display.update()
main()
pygame.quit()
quit()
关键代码说明:
# 不断监听键盘输入
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_change = -10
elif event.key == pygame.K_RIGHT:
x_change = 10
elif event.key == pygame.K_UP:
y_change = -10
elif event.key == pygame.K_DOWN:
y_change = 10
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_UP or event.type == pygame.K_DOWN:
x_change = 0
y_change = 0
这段代码用于监听键盘输入。当用户按下某个键时,将更新 x_change 和 y_change 变量,以控制精灵的移动方向和速度。当用户松开某个键时,将将 x_change 和 y_change 变量重置为 0,以使精灵停止移动。
# 更新精灵位置
x += x_change
y += y_change
这段代码用于更新精灵的位置。每当 x_change 和 y_change 发生变化时,精灵的位置都会相应更新。
# 将精灵绘制到屏幕上
screen.fill( white )
player.set_pos( x, y )
car_group.draw( screen )
这段代码用于将精灵绘制到屏幕上。首先,将屏幕填充为白色。然后,将精灵的位置更新为 x 和 y 坐标。最后,将精灵绘制到屏幕上。
# 更新游戏画面
clock.tick( FPS )
pygame.display.update()
这段代码用于更新游戏画面。首先,将游戏时钟更新为 FPS(每秒帧数)。然后,调用 pygame.display.update() 更新显示屏。