本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。
这次我们来一起了解一下pygame事件与设备轮询。
一、pygame事件
1.简介
pygame事件可以处理游戏中的各种事情。其实在前两节的博客中,我们已经使用过他们了。如下是pygame的完整事件列表:
QUIT,ACTIVEEVENT,KEYDOWN,KEYDOWN,MOUSEMOTION,MOUSEBUTTONUP,MOUSEBUTTONDOWN,JOYAXISMOTION,
JOYBALLMOTION,JOYHATMOTION……..
更多的事件可以去查pygame的文档。http://www.pygame.org/docs/index.html
查看pygame的文档是一种非常好的学习方式。
2.实时事件循环
pygame中的事件处理是放在一个实时的循环中来完成的。将代码都放在一个while True的循环中,但是这样会造成死循环,所以在里面加一句sys.exit()来退出。
1 |
for event in pygame.event.get() |
上面的代码将会创建当前等待处理的事件的一个列表,然后使用for循环来遍历里面的事件。这样,我们将会根据事件产生的顺序依次地进行不同的操作。常见的事件是按键按下,按键释放以及鼠标移动。通常需要最先处理QUIT事件(在用户关闭窗口的时候会产生该事件。)
1 2 3 4 5 |
while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() |
3.键盘事件
键盘事件包括最典型的keyup 和 keydown 当按键按下的时候响应KEYDOWN事件,按键弹起的时候响应KEYDOWN事件。通常可以设置一个事件变量,然后根据keyup或者keydown给它赋不同的值。
1 2 3 4 5 6 7 8 |
while True: for event in pygame.event.get(): if event.type == QUIT: sys.exit() elif event.type == KEYDOWN: key_flag = True elif event.type == KEYUP: key_flag = False |
默认的话pygame不会重复地去响应一个被一直按住的键,只是在按键第一次被按下的时候响应一次,如果需要重复响应一个按键的话下面的操作:
1 2 |
pygame.key.set_repeat(10) #参数是一个以毫秒为单位的值 |
4.鼠标事件
pygame支持一些鼠标事件,他们包括MOUSEMOTION,MOUSEBUTTONUP,MOUSEBUTTONDOWN.
在MOUSEMOTION中包含了一些属性:event.pos,event.rel,event.buttons
1 2 3 4 |
for event in pygame.event.get(): if event.type == MOUSEMOTION: mouse_x,mouse_y = event.pos move_x,move_y = event.rel |
MOUSEBUTTONDOWN里面的属性:
1 2 3 |
event.type == MOUSEBUTTONDOWN: mouse_down = event.button mouse_down_x,mouse_down_y = event.pos |
MOUSEBUTTONUP里面的属性:
1 2 3 |
event.type == MOUSEBUTTONUP: mouse_up = event.button mouse_up_x,mouse_up_y = event.pos |
二、设备轮询
在pygame中除了pygame事件,还可以使用设备轮询的方法来检测是否有事件发生。而且在python里面是没有switch语句的,因此当需要处理的事件过多时,我们肯定不会去一条一条的去写if…elif….else来匹配,而设备轮询正好解决了这个棘手的问题。
1.轮询键盘
在pygame中,使用pygame.key.get_pressed()来轮询键盘接口。这个方法会返回布尔值的一个列表,其中每个键一个标志。使用键常量值来匹配按键,这样的好处就是不必遍历事件系统就可以检测多个键的按下。例如:
1 2 3 4 5 6 7 |
/p>
1.简介 pygame事件可以处理游戏中的各种事情。其实在前两节的博客中,我们已经使用过他们了。如下是pygame的完整事件列表: QUIT,ACTIVEEVENT,KEYDOWN,KEYDOWN,MOUSEMOTION,MOUSEBUTTONUP,MOUSEBUTTONDOWN,JOYAXISMOTION, JOYBALLMOTION,JOYHATMOTION…….. 更多的事件可以去查pygame的文档。http://www.pygame.org/docs/index.html 查看pygame的文档是一种非常好的学习方式。 2.实时事件循环 pygame中的事件处理是放在一个实时的循环中来完成的。将代码都放在一个while True的循环中,但是这样会造成死循环,所以在里面加一句sys.exit()来退出。
上面的代码将会创建当前等待处理的事件的一个列表,然后使用for循环来遍历里面的事件。这样,我们将会根据事件产生的顺序依次地进行不同的操作。常见的事件是按键按下,按键释放以及鼠标移动。通常需要最先处理QUIT事件(在用户关闭窗口的时候会产生该事件。)
3.键盘事件 键盘事件包括最典型的keyup 和 keydown 当按键按下的时候响应KEYDOWN事件,按键弹起的时候响应KEYDOWN事件。通常可以设置一个事件变量,然后根据keyup或者keydown给它赋不同的值。
默认的话pygame不会重复地去响应一个被一直按住的键,只是在按键第一次被按下的时候响应一次,如果需要重复响应一个按键的话下面的操作:
4.鼠标事件 pygame支持一些鼠标事件,他们包括MOUSEMOTION,MOUSEBUTTONUP,MOUSEBUTTONDOWN. 在MOUSEMOTION中包含了一些属性:event.pos,event.rel,event.buttons
MOUSEBUTTONDOWN里面的属性:
MOUSEBUTTONUP里面的属性:
二、设备轮询 在pygame中除了pygame事件,还可以使用设备轮询的方法来检测是否有事件发生。而且在python里面是没有switch语句的,因此当需要处理的事件过多时,我们肯定不会去一条一条的去写if…elif….else来匹配,而设备轮询正好解决了这个棘手的问题。 1.轮询键盘 在pygame中,使用pygame.key.get_pressed()来轮询键盘接口。这个方法会返回布尔值的一个列表,其中每个键一个标志。使用键常量值来匹配按键,这样的好处就是不必遍历事件系统就可以检测多个键的按下。例如: |