天天看点

pygame判断鼠标左键_pygame的事件处理机制

pygame判断鼠标左键_pygame的事件处理机制

逻辑上pygame提供了一个结构叫做事件队列

pygame判断鼠标左键_pygame的事件处理机制

,无论这个事件来自哪里

然后用户编写事件处理程序对队列中的事件进行处理

事件处理遵循先到先处理的原则。

属性是一个类的静态参数

EventType只包含属性

方法是一个类的可操作的内容

事件发生之后,我们可以通过这个类获得事件的一些还原参数。

pygame判断鼠标左键_pygame的事件处理机制
pygame判断鼠标左键_pygame的事件处理机制
pygame判断鼠标左键_pygame的事件处理机制
pygame判断鼠标左键_pygame的事件处理机制
pygame判断鼠标左键_pygame的事件处理机制

一个事件可以理解为一个对象,一个对象就有多个属性

按键的修饰符指的就是当按a的时候加个修饰符说不定就变成大a了.

获得按键信息

pygame判断鼠标左键_pygame的事件处理机制
pygame判断鼠标左键_pygame的事件处理机制
pygame判断鼠标左键_pygame的事件处理机制
pygame判断鼠标左键_pygame的事件处理机制
pygame判断鼠标左键_pygame的事件处理机制
pygame判断鼠标左键_pygame的事件处理机制
import sys
import pygame
pygame.init()
size=width,height=640,480  # 设置窗口的大小
# print(pygame.display.Info())
screen=pygame.display.set_mode(size)   # 将窗口显示到屏幕上
# print(pygame.display.Info())        # 在set_mode前后调用是有区别的
pygame.display.set_caption("Pygame壁球")   # 设置壁球
# color=(0,0,0)     # 设置刷新的颜色
black=0,0,0
ball=pygame.image.load("ball.png")     # 加载图片
"""
这里的ball可以理解为surface对象,对象.get_rect()可以形成一个和对象内切的一个对象
这样就可以方便的使用坐标了
"""
ballrect=ball.get_rect()    # 获取矩形区域
fps=300                     # 1秒钟小球运行300个像素
fclock=pygame.time.Clock()
speed=[1,1]    # 设置移动的X轴,Y轴的矩形     左上角的坐标是(0,0)
still=False    # 小球一直移动这个事件是错的,所以默认小球不会一直移动
# clock=pygame.time.Clock()     # 设置时钟
"""
运行上述代码,会出现一个一闪而过的黑色窗口,这是因为程序执行完成后,会自动关闭,如果让窗口一直显示,需要
使用while True让程序一直执行,此外,还需要设置关闭按钮
"""
while True:
     # clock.tick(60)         # 每秒执行60次
    # 检查事件
    for event in pygame.event.get():
        if event.type==pygame.QUIT:  # 如果单机关闭窗口,则退出
            sys.exit()
        # 按比例缩放窗口
        elif event.type==pygame.VIDEORESIZE:
            size=width,height=event.size[0],event.size[1]      # 这里的0,1代表的是索引
            screen=pygame.display.set_mode(size,pygame.RESIZABLE)
        elif event.type==pygame.KEYDOWN:
            if event.key==pygame.K_LEFT:
                speed[0]=speed[0] if speed[0]==0 else(abs(speed[0]))
            elif event.key==pygame.K_RIGHT:
                speed[0]=speed[0]+1 if speed[0]>0 else speed[0]-1
            elif event.key==pygame.K_DOWN:
                speed[1]=speed[1] if speed[1]==0 else(abs(speed[1]))
            elif event.key==pygame.K_ESCAPE:
                sys.exit()
        # 鼠标按下
        elif event.type==pygame.MOUSEBUTTONDOWN:
            if event.button==1:    # 1代表的是鼠标左键
                still=True
        # 鼠标释放
        elif event.type==pygame.MOUSEBUTTONUP:
            still=False
            if event.button==1:
                ballrect=ballrect.move(event.pos[0]-ballrect.left,event.pos[1]-ballrect.top)
        elif event.type==pygame.MOUSEMOTION:
            if event.buttons[0]==1:
                ballrect=ballrect.move(event.pos[0]-ballrect.left,event.pos[1]-ballrect.top)
    # 设置图标最小化
    if pygame.display.get_active()and not still:
        ballrect=ballrect.move(speed[0],speed[1])    # 移动小球
    # 碰到左右边缘
    if ballrect.left<0 or ballrect.right>width:
        speed[0]=-speed[0]                            # 这里的0代表的是第一个索引,不是速度为0
        if ballrect.right>width and ballrect.right+speed[0]>ballrect.right:
            speed[0]=-speed[0]

    # 碰到上下边缘
    if ballrect.top<0 or ballrect.bottom>height:
        speed[1]=-speed[1]
        if ballrect.bottom>height and ballrect.bottom+speed[1]>ballrect.bottom:
             speed[1]=-speed[1]
    screen.fill(black)        # 填充颜色
    screen.blit(ball,ballrect)   # 将图片画到那个矩形区域里面
    fclock.tick(fps)
    pygame.display.update()     # 更新全部显示


# pygame.quit()
           
pygame判断鼠标左键_pygame的事件处理机制

https://www.zhihu.com/video/1193584810533146624