pygame之事件(一)

来源:互联网 发布:java线程数量 编辑:程序博客网 时间:2024/05/22 05:02
理解事件

     上一个Hello World事件只有一个QUIT事件发生,这是必要的,除非你想让它永远运行。Pygame也能创建其他的诸如鼠标和键盘的事件来通知你。

     事件可以在任何时候产生,而不管你的程序在做什么事情。

检索事件

     在上一个例子中,我们用pygame.event.get()去检索一个事件并且从消息队列里移除它,这就像打开了一扇门而让所有人进来。如果使用pygame.event.wait().Pygame 会等待一个事件发生才会继续下去,这个功能在游戏中不太使用,因为游戏都是动态的。

常用事件表

事件说明参数QUIT用户单击关系按钮noneACTIVEEVENTPygame被激活或隐藏gain,stateKEYDOWN键被按下unicode,key,modKEYUP键被释放key,modMOUSEMOTION移动鼠标pos,rel,buttonsMOUSEBUTTONDOWN鼠标按下pos,butonMOUSEBUTTONUP释放鼠标键pos,buttonJOYAXISMOTIONJaystick or pad 被移动joy,axis,valueJOYBALLMOTIONjoy ball被移动joy,ball,relVIDEORESIZEPygame 窗口绽放size ,w,hVIDEOEXPOSEPygame窗口部分或全部公开noneUSEREVENT用户事件被触发code
让我们写一个简单的脚本来显示所有已经发生的事件。

#coding=utf-8'''Created on 2013-1-25@author: Administrator'''import pygamefrom pygame.locals import *from sys import exitpygame.init()SCREEN_SIZE=(640,480)screen=pygame.display.set_mode(SCREEN_SIZE,0,32)font = pygame.font.SysFont("arial", 16)font_height=font.get_linesize()event_text = []while True:    event = pygame.event.wait()    event_text.append(str(event))    #获得时间名称    event_text = event_text[-SCREEN_SIZE[1]/font_height:]    #这个切片操作保证了event_text里面只保留一个屏幕的文字         if event.type == QUIT:        exit()        screen.fill((255,255,255))        y=SCREEN_SIZE[1] - font_height    for text in reversed(event_text):        screen.blit(font.render(text,True,(0,0,0)),(0,y))        y-=font_height        pygame.display.update()


如果你把fill改成(0,0,0),把字体改成(0,255,0),那些打印出来的屏幕会像《黑客帝国》一样。

     运行后会看到一个简单的窗口,在窗口上面移动鼠标发生MOUSEMOTION事件,窗口上会不停的打印出来坐标,当按下鼠标键的时候也会有相关信息出现。

运行效果图


处理鼠标移动事件:

     当你在窗口移动鼠标时,MOUSEMOTION事件会被激发,它们包含三个值:

    buttons:鼠标上的三个按键对应一个元组,buttons[0]代表左键,buttons[1]代表中键,buttons[2]代表右键,如果键被按下,它的值为1,否则为0.

   pos:鼠标坐标元组

   rel:距离元组。