用pygame开发自己的游戏-3.用键盘控制方块的移动

一、引言

前面用pygame开发自己的游戏-2.让方块动起来文章中我们学会让方块随着时间运动,本文我们实现用键盘控制方块的移动。

二、pygame事件概念

事件在计算机术语常用来指系统中发生的重要事情,比如用户输入、定时器到期等。pygame提供了一个 pygame.event.get()来获取游戏的事件,通过读取整个事件队列,程序可以获得当前的事件并做相应处理。pygame文档中列出以下事件:


用pygame开发自己的游戏-3.用键盘控制方块的移动_第1张图片
pygame事件类型.png

列表中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)
#参数是一个以毫秒为单位的值

游戏主循环前加上这句能得到更好的游戏体验。

四、练习题

  1. 增加功能,当按下w键就将方块向上移动,当按下s键后,方块向下移动。
  2. 当前代码中,即使方块走出边界,依然可以继续走,增加功能,使用当方块走到左边或者右边边界时,无法继续再往外边走。(PS: 可以通过保证x值的范围来完成功能)

你可能感兴趣的:(用pygame开发自己的游戏-3.用键盘控制方块的移动)