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_SPACE和K_RETURN等。
- mod – 包含了组合键信息,如果mod & KMOD_CTRL是真的话,表示用户同时按下了Ctrl键。类似的还有KMOD_SHIFT,KMOD_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])