pygame 学习笔记(6)玩家输入:响应键盘和鼠标事件

本文内容

  • pgame事件
  • 响应键盘事件
  • 响应鼠标事件
  • 设备的轮询

pygame事件

事件是一个概念,比如点击鼠标左键,按下一个键盘的按键,关闭窗口等等都是一个事件,pygame提供了一个函数来获取游戏的事件,并把他们存放在一个队列中,程序通过读取整个事件队列,来获取当前发生的时间,并作出响应。官方doc中给出了以下几种事件:
在这里插入图片描述
我们通过以下函数来获取事件类型:

pygame.evet.get()

获取键盘鼠标事件

获取键盘事件

我们首先遍历事件列表,判断是否有键盘按下时间,如果有我们再进一步判断建值,下面我们以判断是否按键“w”被按下为例:

if event.type == KEYDOWN:
	 if event.key == pygame.K_w:
		print("The button is pressed")

按键的抬起,以及其他按键也是同理,pygame.K_w,表示按键w,pygame.K_ESCAPE,则表示Esc按键被按下。我们来看一段完整的测试代码:

import pygame
from pygame.locals import *
from sys import exit

pygame.init()
screen = pygame.display.set_mode((640,480))

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            exit()
        if event.type == KEYDOWN:
            if event.key == pygame.K_w:
                print("The button is pressed")

当你运行这段代码的时候,只要游戏窗口是活动状态(即你鼠标点了一下游戏窗口),按下键盘上的“W”按键,他就会打印出我们程序设计好的调试语句“The button is pressed”,如下图所示:
在这里插入图片描述
这里,你需要注意你的输入法,当你发现,程序似乎没有相应按键“W”的时候,可能是因为输入法的原因,比如你在点击游戏窗口后,切换到了中文输入法,这种情况是不会响应的。
如下图所示:
在这里插入图片描述
这种情况有一点计算机经验的用户是很容易发现的,但是有时候这个输入法会被游戏窗口挡住,则给人造成程序出现问题的错觉。鼠标的事件获取也是同样的道理,接着我们看一下具体例子。

获取鼠标事件

鼠标事件有按键单击,包括左键,滑轮,中键等,当然pgame.evet()函数还会给我们返回鼠标的坐标(pos)。下面给出一段完整的测试例子:

import pygame
from pygame.locals import *
from sys import exit

pygame.init()
screen = pygame.display.set_mode((640,480))

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            exit()
        if event.type == MOUSEBUTTONDOWN:
            mouse_x,mouse_y = event.pos
            print(mouse_x,mouse_y)

在这程序中,我们判断鼠标按键按下事件,如果有按键按键,就打印出鼠标的坐标值,这个值是相对窗口来说的,也就是你的鼠标停留在窗口的左上顶点处,event.pos将返回(0,0)。程序运行如下:
在这里插入图片描述

一些其他的API函数

我们上文介绍了获取键盘和鼠标的函数,pygame还提供其他函数:

pygame.key.get_pressed()									#获取被按下的键值
pox_x,pox_y = pygame.mouse.get_pos() 						#获取鼠标坐标
rel_x,rel_y = pygame.mouse.get_rel()       					#获取鼠标相对移动

猜你喜欢

转载自blog.csdn.net/qq_17351161/article/details/89267219
今日推荐