pygame教程实例(三)游戏事件

上一篇:pygame教程实例(二)模拟三体
下一篇:pygame教程实例(四)小球弹跳(事件)


本教程使用python3


pygame教程实例(一)小球弹跳中我们写了一个小球在重力的作用下反复弹跳。
但是游戏最重要的一点是玩家与游戏的交互(通过鼠标、键盘、手柄等设备)。

一、什么是事件

点击鼠标、移动鼠标、滑动滚轮、按下键盘等都是事件。
不过,点击鼠标其实不是一个事件,而是两个事件(按下鼠标,松开鼠标),按下键盘按键也是一样的

二、事件获取

pygame会把事件放到一个队列里,程序从队列里读取事件并进行相应的处理。当然你也可以不处理,但读取事件是必须的,不然这个队列就满了,然后你的程序会卡住。

1.读取事件

使用pygame.event.get()读取队列里所有事件并清空队列。
我们使用for循环来遍历事件

for event in pygame.event.get():
    # event 是一个事件对象
    # event.type 是事件类型

那么event.type有哪些呢

事件类型产生途径参数
QUIT用户按下关闭按钮none
ATIVEEVENTPygame被激活或者隐藏gain, state
KEYDOWN键盘被按下unicode, key, mod
KEYUP键盘被放开key, mod
MOUSEMOTION鼠标移动pos, rel, buttons
MOUSEBUTTONDOWN鼠标按下pos, button
MOUSEBUTTONUP鼠标放开pos, button
JOYAXISMOTION游戏手柄(Joystick or pad)移动joy, axis, value
JOYBALLMOTION游戏球(Joy ball)移动joy, axis, value
JOYHATMOTION游戏手柄(Joystick)移动joy, axis, value
JOYBUTTONDOWN游戏手柄按下joy, button
JOYBUTTONUP游戏手柄放开joy, button
VIDEORESIZEPygame窗口缩放size, w, h
VIDEOEXPOSEPygame窗口部分公开(expose)?none
USEREVENT触发了一个用户事件code

2.处理事件

先看这个事件类型QUIT
QUIT是pygame里的一个常量,我们必须先导入

import pygame
from pygame.locals import *

当用户点击关闭按钮(就是窗口右上角的那个叉叉)就会触发这个事件。
代码如下

for event in pygame.event.get():
	if event.type == QUIT:
		exit()

也许你希望点击关闭按钮后给用户弹一个框,询问是否退出。

def my_exit():
	# 在这里弹窗
	# 不过pygame里似乎没有弹窗
	# 你可以在窗口里画一个弹窗

for event in pygame.event.get():
	if event.type == QUIT:
		my_exit()

然后是键盘事件

for event in pygame.event.get():
	if event.type == QUIT:
		exit()
	if event.type == KEYDOWN: # KEYDOWN 按键被按下
		if event.key == K_ESCAPE:
			print('你按下了Esc键,准备退出')
			exit()
		if event.key == K_LEFT or event.key == K_a:
			# K_LEFT:左方向键
			# K_a:A键
			print('向左移动')
		if event.key in [K_RIGHT, K_d]:
			print('向右运动')
		if event.key == K_SPACE:
			print('按下了空格键')
	elif event.type == KEYUP: # KEYUP 按键被松开
		if event.key  in [K_LEFT, K_a]:
			print('停止向左移动')

还有鼠标事件

for event in pygame.event.get():
	if event.type == QUIT:
		exit()
	if event.type == KEYDOWN: # KEYDOWN 按键被按下
		pass
	elif event.type == KEYUP: # KEYUP 按键被松开
		pass
	elif event.type == MOUSEBUTTONDOWN: # 鼠标左键被按下
		print('点击的坐标是',event.pos)
		# event.pos 元组,点击位置的x,y坐标
		# 窗口左上角坐标为 (0,0)

按键大全:

KeyASCIIASCII描述
K_BACKSPACE\b退格键(Backspace)
K_TAB\t制表键(Tab)
K_CLEAR清楚键(Clear)
K_RETURN\r回车键(Enter)
K_PAUSE暂停键(Pause)
K_ESCAPE^[退出键(Escape)
K_SPACE空格键(Space)
K_EXCLAIM!感叹号(exclaim)
K_QUOTEDBL"双引号(quotedbl)
K_HASH#井号(hash)
K_DOLLAR$美元符号(dollar)
K_AMPERSAND&and 符号(ampersand)
K_QUOTE单引号(quote)
K_LEFTPAREN(左小括号(left parenthesis)
K_RIGHTPAREN)右小括号(right parenthesis)
K_ASTERISK*星号(asterisk)
K_PLUS+加号(plus sign)
K_COMMA,逗号(comma)
K_MINUS-减号(minus sign)
K_PERIOD.句号(period)
K_SLASH/正斜杠(forward slash)
K_000
K_111
K_222
K_333
K_444
K_555
K_666
K_777
K_888
K_999
K_COLON:冒号(colon)
K_SEMICOLON;分号(semicolon)
K_LESS<小于号(less-than sign)
K_EQUALS=等于号(equals sign)
K_GREATER>大于号(greater-than sign)
K_QUESTION?问号(question mark)
K_AT@at 符号(at)
K_LEFTBRACKET[左中括号(left bracket)
K_BACKSLASH\反斜杠(backslash)
K_RIGHTBRACKET]右中括号(right bracket)
K_CARET^脱字符(caret)
K_UNDERSCORE_下划线(underscore)
K_BACKQUOTE`重音符(grave)
K_aaa
K_bbb
K_ccc
K_ddd
K_eee
K_fff
K_ggg
K_hhh
K_iii
K_jjj
K_kkk
K_lll
K_mmm
K_nnn
K_ooo
K_ppp
K_qqq
K_rrr
K_sss
K_ttt
K_uuu
K_vvv
K_www
K_xxx
K_yyy
K_zzz
K_DELETE删除键(delete)
K_KP00(小键盘)
K_KP11(小键盘)
K_KP22(小键盘)
K_KP33(小键盘)
K_KP44(小键盘)
K_KP55(小键盘)
K_KP66(小键盘)
K_KP77(小键盘)
K_KP88(小键盘)
K_KP99(小键盘)
K_KP_PERIOD.句号(小键盘)
K_KP_DIVIDE/除号(小键盘)
K_KP_MULTIPLY*乘号(小键盘)
K_KP_MINUS-减号(小键盘)
K_KP_PLUS+加号(小键盘)
K_KP_ENTER\r回车键(小键盘)
K_KP_EQUALS=等于号(小键盘)
K_UP向上箭头(up arrow)
K_DOWN向下箭头(down arrow)
K_RIGHT向右箭头(right arrow)
K_LEFT向左箭头(left arrow)
K_INSERT插入符(insert)
K_HOMEHome 键(home)
K_ENDEnd 键(end)
K_PAGEUP上一页(page up)
K_PAGEDOWN下一页(page down)
K_F1F1
K_F2F2
K_F3F3
K_F4F4
K_F5F5
K_F6F6
K_F7F7
K_F8F8
K_F9F9
K_F10F10
K_F11F11
K_F12F12
K_F13F13
K_F14F14
K_F15F15
K_NUMLOCK数字键盘锁定键(numlock)
K_CAPSLOCK大写字母锁定键(capslock)
K_SCROLLOCK滚动锁定键(scrollock)
K_RSHIFT右边的 shift 键(right shift)
K_LSHIFT左边的 shift 键(left shift)
K_RCTRL右边的 ctrl 键(right ctrl)
K_LCTRL左边的 ctrl 键(left ctrl)
K_RALT右边的 alt 键(right alt)
K_LALT左边的 alt 键(left alt)
K_RMETA右边的元键(right meta)
K_LMETA左边的元键(left meta)
K_LSUPER左边的 Window 键(left windows key)
K_RSUPER右边的 Window 键(right windows key)
K_MODE模式转换键(mode shift)
K_HELP帮助键(help)
K_PRINT打印屏幕键(print screen)
K_SYSREQ魔术键(sysrq)
K_BREAK中断键(break)
K_MENU菜单键(menu)
K_POWER电源键(power)
K_EURO欧元符号(euro)

下一篇我们重写一下小球弹跳,使我们能控制小球运动


上一篇:pygame教程实例(二)模拟三体
下一篇:pygame教程实例(四)小球弹跳(事件)

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值