pygame 简单的按键处理(2)

import pygame
import sys

#             R    G    B
WHITE     = (255, 255, 255)
BLACK     = (  0,   0,   0)
RED       = (255,   0,   0)
GREEN     = (  0, 255,   0)
DARKGREEN = (  0, 155,   0)
DARKGRAY  = ( 40,  40,  40)
OLIVE     = (128, 128,   0)
BLUE      = (  0,   0, 255)
NAVYBLUE  = (  0,   0, 128)

def main():
    pygame.init()
    pygame.display.set_caption("Hello world")

    screen = pygame.display.set_mode((640,480),0,32)
    #background = pygame.image.load("flippyboard.png")

    x = 640//2
    y = 480//2

    move_x,move_y = 0,0
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN: #键被按下
                if event.key == pygame.K_LEFT:
                    move_x = -1
                elif event.key == pygame.K_RIGHT:
                    move_x = 1
                elif event.key == pygame.K_UP:
                    move_y = -1
                elif event.key == pygame.K_DOWN:
                    move_y = 1
            elif event.type == pygame.KEYUP:
                move_x = 0
                move_y = 0

        x = x + move_x
        y = y + move_y                

        x = (x + 640)%640
        y = (y + 480)%480

        screen.fill(DARKGRAY) #重新填充屏幕背景色
        pygame.draw.circle(screen,BLUE,(x,y),30)  #在新的位置画一个画

        pygame.display.update()  #更新

if __name__ == '__main__':
    main()

 

KEYDOWN和KEYUP的参数描述如下:

  • key – 按下或者放开的键值,是一个数字,估计地球上很少有人可以记住,所以Pygame中你可以使用K_xxx来表示,比如字母a就是K_a,还有K_SPACEK_RETURN等。
  • mod – 包含了组合键信息,如果mod & KMOD_CTRL是真的话,表示用户同时按下了Ctrl键。类似的还有KMOD_SHIFTKMOD_ALT
  • unicode – 代表了按下键的Unicode值,这个有点不好理解,真正说清楚又太麻烦,游戏中也不太常用,说明暂时省略,什么时候需要再讲吧。

事件过滤

并不是所有的事件都需要处理的,就好像不是所有登门造访的人都是我们欢迎的一样。比如,俄罗斯方块就无视你的鼠标,而在游戏场景切换的时候,你按什么都是徒劳的。我们应该有一个方法来过滤掉一些我们不感兴趣的事件(当然我们可以不处理这些没兴趣的事件,但最好的方法还是让它们根本不进入我们的事件队列,就好像在门上贴着“XXX免进”一样),我们使用pygame.event.set_blocked(事件名)来完成。如果有好多事件需要过滤,可以传递一个列表,比如pygame.event.set_blocked([KEYDOWN, KEYUP]),如果你设置参数None,那么所有的事件有被打开了。与之相对的,我们使用pygame.event.set_allowed()来设定允许的事件。

    
    #设置允许事件列表
    pygame.event.set_allowed([pygame.KEYDOWN,pygame.KEYUP])

    #设置堵塞事件列表
    #pygame.event.set_blocked([pygame.KEYDOWN,pygame.KEYUP])

 

posted on 2016-04-24 22:03  felixr  阅读(20486)  评论(0编辑  收藏  举报

导航