pygame基础介绍

事件处理机制

事件:原则是先到先处理
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 对象


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值