事件处理机制
事件:原则是先到先处理
pygame.event.EVENTTYPE,只有属性,没有方法,你也可以定义新的事件类型
from pygame.event import *
事件处理的重要函数:
get():直接获得所有被便利的事件,还可以放到for循环里
poll():从事件队列中获得单一事件,并在原队列中删除,如果事件队列为空,返回event.NOEVENT
clear(type/typelist):删除事件队列中的所有函数,和get()类似,还可加参数,指定删除某类型的事件
pygame的事件队列中只能储存128个事件,如果你的游戏产生事件频繁的话......
事件队列处理的重要函数:
set_blocked(type or typelist)设定哪些事件类型不允许被保存到事件队列当中
get_blocked(type):判断某个类型的事件是否被禁止
set_allowed(type or typelist):控制哪些事件类型允许保存到事件队列中
生成事件:
post(Event):一般是把自定义的事件类型(USEREVENT)放到事件事件队列中
Event(type,dicyt):创建一个给定类型的事件,属性名采用字符串形式,值该是啥就是啥,也可以创建已有类型的事件,
实现键盘游戏自己按键盘的效果.
1.键盘,鼠标(这里主要讲鼠标)
MOUSEMOTION:鼠标移动事件,三个属性:
pos:是一个元组,当前位置,相对于左上角
rel:输一个元组,相对于上次位置的移动位移
buttons:(a,b,c),鼠标按钮状态,,对于鼠标的三个键,哪个位置按下了,那他就是1,否则为0
MOUSEBUTTONUP:鼠标释放事件
pos:同上
button:按下键的编号,1,2,3,对应鼠标的三个键
MOUSEBUTTONDOWN:鼠标点击事件:
同上,可以自己测试以下
2.屏幕尺寸和模式变化
3.游戏情节的特定触发条件
4.产生一些触发事件
屏幕绘制机制:
pygame只有一个屏幕,想生成新屏幕要让现有屏幕消失
1.尺寸和模式:
pygame.display.set_mode(r=(width,height),flags=)
以下都是flags的可选参数,可用|
全屏显示:pygame.FULLSCREEN
大小可调节:pygame.RESIZABLE,记得窗体刷新和游戏的响应
无边框:pygame.NOFRAME,记得做退出方式
pygame.display.info():生成屏幕的相关信息:
会产生一个VideoInfo,有两个参数,current_w,current_h,分别为像素宽度和像素高度
可以使用这两个参数感知窗体变化,并且得到操作系统的分辨率信息并应用到游戏中
pygame.VIDEORESIZE是个事件类,只在屏幕大小发生更改的时候发生,会返回event.size元组.
(其实不叫返回,而是符合该类型的事件它就有这个属性,你可以在if判断之后直接调用该event的属性)
宽度:.size[0],event.w
高度:.size[1],event.h
2.窗口标题和图标
还有set_caption()设标题,
title:窗口标题
icon_title:窗口图表化之后的小标题,一半不用
可以在不同的游戏情节中设置不同的游戏标题,增加游戏的交互性
set_icon()设置图标,
参数要是一个surface对象
get_caption()返回元组,
3.窗口感知和刷新(from pygame.display):
get_active():
在系统中被显示(屏幕绘制/非图标化)返回True,否则返回False,判断游戏窗口是否被最小化,
可以在游戏最小化后暂停游戏
flip():只绘制有变化的区域
update():直接重新绘制所有
4.加载图片的时候加一个.convert_alpha()可以提高游戏速度
色彩与绘图机制:
from pygame import *
色彩机制:
用Color类:
使用色彩名字,RGBA值,HTML色彩格式,
RGBA模式就是(红,绿,蓝,透明度),透明度非必须,三个颜色通道,每个取值为0-255,255表示不透明
有四个属性:r,g,b,a,分别对应元组的四个元素
图形绘制机制:
就是向屏幕上绘制简单的图形,每一个图形都用它的外界矩形表示,就是pygame.Rect
(left,top)
width,
height
要画图形的画,就去pygame.draw类下找相关参数吧,垃圾EGE,反正我对这个不感兴趣
文字绘制机制:
使用pygame.freetype绘制特定字体的文字,这个模块要额外import以下
字体们在C:/Windows/Fonts, .ttf,.ttc为后缀
Font(file,sizr):根据字体和字号生成,file是字体类型或名称
render_to(
绘制字体的平面,surface对象;
dest 字体在平面中的具体位置;
text 绘制的字体内容;
fgcolor 字体的颜色;
bgcolor 背景颜色;
rotation 逆时针旋转的角度 0-359,有的字体不能旋转;
size 文字大小;
):键具体的文字绘制到屏幕上,返回Rect类型,
render():只有上面那个的后5个参数,
返回一个(表示绘制的区域的surface对象(我就话画到这了),rect对象(画了这么大))
绘制机制原理精髓:
rect其实就是主图层(可以现实的图层)的一个区域
键盘事件:
事件类型:pygame.KEYDOWN
再具体一点,事件的键,即event.key,分别有K_UP,K_DOWN,K_LEFT,K_RIGHT判断之下添加效应即可.
四个小if即可.
Esc键是K_ESCAPE.
KEY_DOWN:
三个属性,
unicode,按键的unicode码,与平台相关,不建议
key,按键的常量值
mod,按键修饰符的组合值
比如说:
event.key==K_a
event.mod==K_ALT|K_SHIFT
这就知道你按的是alt+shift+a
KEY_UP:
key
mod
键盘事件完事
音乐:
背景音乐
pygame.mixer.music
load()
play()
rewind()
stop()
pause()
set_volume()
音效:
pygame.mixer.Sound()生成一个sound对象
play()
stop()
set_volume()
fadeout()
精灵:
核心就是面向对象呗,
继承pygame.sprite.Sprite库就好,
然后什么初始化,特定动作的.
其他
*.怎么移动图像:
要先移动位置,就要调用rect对象的move()方法
所以就是先改变图像位置,然后再贴一下,然后再用背景覆盖画布(否则图像以前的位置也会留下),循环.
*.编写游戏的步骤:
1.导入相关库
2.初始化
3.事件处理部分
4.刷新图像
最后3,4无限循环.
*.使用pygame.dispaly.set_mode((width,height))设置一个初始化窗口
*.pygame.display.update()函数进行刷新,默认窗口全部重绘
*.screen.fill()RGB颜色体系
*.帧率:帧:一副图像,帧率就是一秒钟能有多少帧.
pygame支持的帧率是40到两百兆.
使用pygame.time.Clock()可获得时钟对象,用于操纵时间
clock,tick(fps),时钟对象的一个方法,用于控制帧率.
事件类型以及键盘的key属性:
soud对象的方法:
music对象方法:
rect对象方法:
rect对象属性:
x,y
top, left, bottom, right
topleft, bottomleft, topright, bottomright
midtop, midleft, midbottom, midright
center, centerx, centery
size, width, height
w,h
pygame.Rect.copy() — 拷贝 Rect 对象
pygame.Rect.move() — 移动 Rect 对象
pygame.Rect.move_ip() — 原地移动 Rect 对象
pygame.Rect.inflate() — 放大和缩小 Rect 对象的尺寸
pygame.Rect.inflate_ip() — 原地放大和缩小 Rect 对象的尺寸
pygame.Rect.clamp() — 将一个 Rect 对象移动到另一个 Rect 对象的中心
pygame.Rect.clamp_ip() — 原地将一个 Rect 对象移动到另一个 Rect 对象的中心
pygame.Rect.clip() — 获取两个 Rect 对象互相重叠的部分
pygame.Rect.union() — 将两个 Rect 对象合并
pygame.Rect.union_ip() — 原地将两个 Rect 对象合并
pygame.Rect.unionall() — 将多个 Rect 对象合并
pygame.Rect.unionall_ip() — 原地将多个 Rect 对象合并
pygame.Rect.fit() — 按照一定的宽高比调整 Rect 对象
pygame.Rect.normalize() — 翻转 Rect 对象(如果尺寸为负数)
pygame.Rect.contains() — 检测一个 Rect 对象是否完全包含在该 Rect 对象