一、引言
前面用pygame开发自己的游戏-2.让方块动起来文章中我们学会让方块随着时间运动,本文我们实现用键盘控制方块的移动。
二、pygame事件概念
事件在计算机术语常用来指系统中发生的重要事情,比如用户输入、定时器到期等。pygame提供了一个 pygame.event.get()来获取游戏的事件,通过读取整个事件队列,程序可以获得当前的事件并做相应处理。pygame文档中列出以下事件:
列表中KEYDOWN、KEYUP这两事件分别代表键盘按下、键盘松开事件。键盘事件也只是事件列表中的一种,我们需要判断是否有键盘按下,再通过api返回的键值来判断某个键有没有被按下。
if event.type == KEYDOWN:
if event.key == pygame.K_w:
print("The button is pressed")
上述代码中程序判断键盘按下事件发生后,再判断是否按键“w”被按下。
三、功能及代码实现
awsd四个字母在很多游戏做为左上下右四个方向键,我们来实现一个功能,先在游戏中画出一个方块,当按下a键就将方块向左移动,当按下d键后,方块向右移动。
思路
方块的x坐标会在不同的情况下有所变化,我们用一个变量x来保存,x值只有在键盘被按下后变化,我们用依照前面代码做好相应处理就好。
代码如下:
import pygame, sys
# 初始化
pygame.init()
SCREEN = pygame.display.set_mode((400, 300))
pygame.display.set_caption('Hello World!')
x = 110
# 游戏主循环
while True:
for event in pygame.event.get():
# 处理退出事件
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 键盘按下事件
elif event.type == pygame.KEYDOWN:
# 'a'键被按下
if event.key == pygame.K_a:
x -= 5
elif event.key == pygame.K_d:
x += 5
SCREEN.fill((255, 255, 255))
# 调用 pygame.display.update() 方法更新整个屏幕的显示
pygame.draw.rect(SCREEN, (255, 0, 0), (x, 130, 100, 50))
pygame.display.update()
pygame.time.delay(50)
默认的话pygame不会重复地去响应一个被一直按住的键,只是在按键第一次被按下的时候响应一次,如果需要重复响应一个按键的话下面的操作:
pygame.key.set_repeat(10)
#参数是一个以毫秒为单位的值
游戏主循环前加上这句能得到更好的游戏体验。
四、练习题
- 增加功能,当按下w键就将方块向上移动,当按下s键后,方块向下移动。
- 当前代码中,即使方块走出边界,依然可以继续走,增加功能,使用当方块走到左边或者右边边界时,无法继续再往外边走。(PS: 可以通过保证x值的范围来完成功能)