pygame.sprite
2020-08-04 10:36:52 0 举报
AI智能生成
pygame
作者其他创作
大纲/内容
Sprite
用来管理可视化对象的简单基类
Sprite(*groups) -> Sprite
update - 基类中不实现,作为hook; Group.update()调用
add(*groups) - 添加到指定组
remove(*groups) - 从指定组里移除
kill - 从所有组里移除, 不影响该sprite继续使用
alive - 检测是否属于一个或多个组内
groups - 返回包含该对象的组
使用说明
从该类衍生出的子类需要覆写update
需要给Sprite.image和Sprite.rect属性赋值
The initializer can accept any number of Group instances to be added to.
需要在添加组之前调用初始化函数
DirtySprite
Sprite的子类, 包含了更多属性和特性
DirtySprite(*groups) -> DirtySprite
附加属性包括
dirty=1
若=1, 再重绘后设为0
若=2, 总是脏的(不重置flag, 每帧重绘)
若=0, 不脏, 不重绘
blendmode=0
blit的special_flags
source_rect=None
相对于self.image的 (0,0) 坐标的外轮廓
visible=1
通常为1,若为0则不会重绘(同时需设dirty=1, 使之从屏幕上擦除)
layer=0
只读属性, 当添加到LayeredDirty时被读取
Group
用来容纳和管理多个Sprite对象的容器类
Group(*sprite) -> Group
sprites() -> sprite_list - 列出组内包含的所有Sprite
copy() -> Group - 复制组
add(*sprites) -> None - 添加Sprite到该组
remove(*sprites) -> None - 移除Sprite
has(*sprites) -> None - 测试是否包含Sprite, 相比in, 可以同时测试多个
update(*args) -> None
调用包含Sprite的update方法
参数会传给所有Sprite的update方法, 但没有方法获得其返回值
draw(Surface) -> None
绘制组内包含Sprite图像到参数Surface上
使用Sprite.image作为源surface, Sprite.rect作为位置
clear(Surface_dest, background) -> None
在Sprite上绘制背景图
擦除上次Group.draw()方法中用到的Sprites
dest_surface中绘制过sprites的位置会用background填充
background通常是一幅surface图像,但也可以是回调函数(包含dest_surf, rect两个参数), 一次clear中会调用多次
empty() -> None - 移除所有Sprite
本类可以被继承, 从而扩展出更多行为. 构造器接收任意数量Sprite参数添加到组. 组也支持python的通用方法: in, len, bool, iter
组内的Sprite没有顺序, 所以draw和iter不会按顺序
RenderPlain
pygame.sprite.Group()的别名, 没有额外的函数功能
RenderClear
pygame.sprite.Group()的别名, 没有额外的函数功能
RenderUpdates
Group子类, 用来跟踪脏刷新
RenderUpdates(*sprites) -> RenderUpdates
draw(surface) - > Rect_list
绘制Sprite图像(同Gourp.draw()), 跟踪修改过的区域(包括上一次Group.clear()导致的变化)
可传给pygame.display.update()
OrderedUpdates
RenderUpdates子类, 按添加顺序绘制Sprites
维护了一个Sprites加入的顺序, 相比常规Group, 添加和移除的顺序稍慢
LayeredUpdates
用来处理层(layer)的组, 绘制行为类似OrderedUpdates, 该个组和pygame.sprite.Sprite完全兼容
LayeredUpdates(*spites, **kwargs) -> LayeredUpdates
add(*sprites, **kwargs) -> None - 添加一个或一系列sprite到组内(添加到哪层依次查找kwarg, 实例属性, 默认层)
sprites() -> sprites - 返回sprites的有序列表(先下层, 后上层)
draw(surface) -> Rect_list - 向传入的surface按顺序绘制所有sprites
get_sprites_at(pos) -> colliding_sprites - 返回该位置所有sprites, 底层在前, 上层在后
get_sprite(idx) -> sprite - 返回组中序号为idx的sprite
remove_sprite_of_layer(layer_nr) -> sprites - 移除层上所有sprites, 并以列表返回
layers() -> layers - 返回层定义列表, 从底到顶
change_layer(sprite, new_layer) -> None - 变更sprite的层次
get_layer_of_sprite(sprite) -> layer - 返回该sprite当前所在层次, 若未找到则返回默认层
get_top_layer() -> layer - 返回顶层
get_bottom_layer() -> layer - 返回底层
move_to_front(sprite) -> None - 将sprite移至最顶层(该层在层列表末尾, 额外加了一层)
move_to_back(sprite) -> None - 将sprite移至最底层(移到所有层之下, 增加了一个额外层)
get_top_sprite() -> Sprite - 返回最顶层sprite
get_sprites_from_layer(layer) -> sprites - 返回层内所有sprites, 按照被添加的顺序, 这里使用了线性搜索, 并且所有sprites不会被从该层移除
switch_layer(layer1_nr, layer2_nr) -> None - 将sprites从层1切换到层2, 层次必须存在
使用说明
可设置默认层(使用kwargs参数中, default_layer), 默认层为0
若被添加的sprite拥有属性layer, 那么该属性会被使用
若**kwarg 包含layer, 那么传入的sprites会添加到该层(覆盖sprite.layer属性)
若sprite没有layer, **kwarg也未传入, 则添加到默认层
LayeredDirty
用来容纳DirtySprite的组, 是LayeredUpdates的子类
LayeredDirty(*spites, **kwargs) -> LayeredDirty
这种组要求pygame.sprite.DirtySprite或其他任何带有以下属性的sprite: image, rect, dirty, visible, blendmode (see doc of DirtySprite).
这种组使用了脏标志位技术, 若你有较多不经常变化的sprite, 将比pygame.sprite.RenderUpdates要快
这种组也会自动计算哪些区域需要刷新, 所以不用考虑哪种会比它更快
和pygame.sprite.Group一样,也可通过kwarg设置某些属性
_use_update: True/False default is False
_default_layer: default layer where sprites without a layer are added.
_time_threshold: threshold time for switching between dirty rect mode
and fullscreen mode, defaults to 1000./80 == 1000./fps
and fullscreen mode, defaults to 1000./80 == 1000./fps
draw(surface, bgd=None) -> Rect_list -
按顺序绘制所有sprites到传入的surface
也可传入background, 若background已经设置, bgd将不再生效
clear(surface, bgd) -> None - 用来设置背景
repaint_rect(screen_rect) -> None - 重新绘制给定区域(screen_rect使用屏幕坐标)
set_clip(screen_rect=None) -> None - 剪切掉需要绘制的区域
get_clip() -> Rect - 剪切掉需要绘制的区域
change_layer(sprite, new_layer) -> None - 更改sprite的层(sprite必须添加到renderer)
set_timing_treshold(time_ms) -> None - 默认为 1000./80, 80为全屏模式下的fps. 该方法名称打错了需要更改
GroupSingle
该组只能容纳一个sprite, 当前新添加, 老的即被移除
GroupSingle(sprite=None) -> GroupSingle
它有一个特殊的属性, GroupSingle.sprite, 可访问到组内包含的sprite. 组为空时为None. 可被赋值给一个Sprite
spritecollide()
spritecollide(sprite, group, dokill, collided=None) -> Sprite_list
返回一个组中所有sprite和另一个sprite产生交集(insersect)的列表
交集的判断是通过比较每个sprite.rect属性
dokill参数为布尔型. 如果设为True, 所有发生碰撞的sprite会被从组中移除
collide_rect
collide_rect_ratio
collide_circle
collide_circle_ratio
collide_mask
groupcollide
spritecollideany
收藏
收藏
0 条评论
下一页