sprite模块是一个主要用来实现精灵的模块,在pygame中,精灵可以认为是一张张可以在屏幕中移动的小图片,并且可以和其他图形对象交互。精灵可以是pygame绘制的图像,也可以是其他途径生成的图像。在pygame中,精灵用Sprite对象来表示,使用时不需要实例化,而是继承这个类,然后按照需要写出自己的类即可。每个Sprite类都必须有两个属性rect和image,例如下面的这一个Block类:
class Block(pygame.sprite.Sprite):
def __init__(self, color, width, height):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface([width, height])
self.image.fill(color)
self.rect = self.image.get_rect()
def update(self):
self.rect.x += 5
if self.rect.left > WIDTH:
self.rect.right = 0
sprite模块主要有下列方法:
函数 | 描述 |
---|---|
pygame.sprite.spritecollide | 在一个Group组中查找与目标Sprite相交的Sprite精灵 |
pygame.sprite.collide_rect | 通过两个Sprite中的rect属性判断两个Sprite精灵是否碰撞 |
pygame.sprite.collide_rect_ratio | 通过两个Sprite中的按比例缩放的rect矩形判断两个Sprite精灵是否碰撞 |
pygame.sprite.collide_circle | 通过两个Sprite中完全包围rect的圆圈判断两个Sprite精灵是否碰撞 |
pygame.sprite.collide_circle_ratio | 通过两个Sprite中完全包围rect的带比例缩放的圆圈判断两个Sprite精灵是否碰撞 |
pygame.sprite.collide_mask | 通过两个Sprite中的mask来判断两个Sprite是否碰撞 |
pygame.sprite.groupcollide | 判断两个Group中发生碰撞的所有Sprite精灵 |
pygame.sprite.spritecollideany | 测试Sprite精灵是否与组中的单个精灵发生碰撞 |
pygame.sprite.GroupSingle | 返回一个只包含单个Sprite的组容器 |
对于一个Sprite对象或者继承Sprite类的对象,有下列方法:
函数 | 描述 |
---|---|
pygame.sprite.Sprite.update | 控制精灵行为的方法,这个方法的默认实现什么都不做;它只是一个方便的“钩子”,您可以覆盖它来实现对精灵的控制 |
pygame.sprite.Sprite.add | 添加精灵到组中 |
pygame.sprite.Sprite.remove | 从组中删除精灵 |
pygame.sprite.Sprite.kill | 从所有的组中删除精灵 |
pygame.sprite.Sprite.alive | 判断精灵是否属于任何组 |
pygame.sprite.Sprite.groups | 列出包含该精灵的所有组 |
DirtySprite是Sprite的子类,在Sprite的基础上,增加了几个属性。
第一个属性为dirty,如果设置为1,那么Sprite只需要绘制一次,如果设置为2,那么每一帧都需要绘制一次,如果设置为0,则不需要绘制
第二个属性为blendmode,表示混合模式,默认值为0
第三个属性为source_rect,表示使用的rect对象,相对于self.image而言
第四个属性为visible,默认为1,如果为0则将不会被绘制
第五个属性为layer,表示精灵所在组的层数,默认为第0层
Sprite对象所在的组用Group对象来表示,又称为RenderPlain或者RenderClear,有如下方法:
函数 | 描述 |
---|---|
pygame.sprite.Group.sprites | 列出组中所包含的精灵 |
pygame.sprite.Group.copy | 复制组 |
pygame.sprite.Group.add | 向组中添加精灵 |
pygame.sprite.Group.remove | 从组中移除精灵 |
pygame.sprite.Group.has | 测试组中是否包含精灵 |
pygame.sprite.Group.update | 调用组中所有精灵的updata方法 |
pygame.sprite.Group.draw | 绘制Sprite对象到surface中 |
pygame.sprite.Group.clear | 绘制背景在Sprite对象上 |
pygame.sprite.Group.empty | 移除组中所有的Sprite对象 |
Group的子类RenderUpdates,主要用于追踪脏更新,只有一个方法:
pygame.sprite.RenderUpdates.draw(surface)
与Group中的draw方法不同的是,该方法返回一个rect列表,记录屏幕中所有改变的rect区域
而RenderUpdates的子类OrderedUpdates,维护Sprite添加到Group以进行渲染的顺序,使得从组中添加和删除 Sprite 比常规组慢一些。
对于LayeredUpdates,本质上也是一个Group组,可以像组一样使用LayeredUpdates,它有下列方法:文章来源:https://www.toymoban.com/news/detail-482626.html
函数 | 描述 |
---|---|
pygame.sprite.LayeredUpdates.add | 添加精灵或者精灵序列到组中 |
pygame.sprite.LayeredUpdates.sprites | 返回一个有序的精灵列表 |
pygame.sprite.LayeredUpdates.draw | 以正确的顺序绘制精灵到surface上 |
pygame.sprite.LayeredUpdates.get_sprites_at | 返回一个该位置所有精灵的列表 |
pygame.sprite.LayeredUpdates.get_sprite | 返回组中索引位置的精灵 |
pygame.sprite.LayeredUpdates.remove_sprites_of_layer | 从图层中删除所有精灵并将它们作为列表返回 |
pygame.sprite.LayeredUpdates.layers | 返回定义的(唯一的)层列表,从下到上排序 |
pygame.sprite.LayeredUpdates.change_layer | 改变精灵的层 |
pygame.sprite.LayeredUpdates.get_layer_of_sprite | 返回精灵当前所在的层 |
pygame.sprite.LayeredUpdates.get_top_layer | 返回顶层 |
pygame.sprite.LayeredUpdates.get_bottom_layer | 返回底层 |
pygame.sprite.LayeredUpdates.move_to_front | 将精灵移动到前一层 |
pygame.sprite.LayeredUpdates.move_to_back | 将精灵移动到后一层 |
pygame.sprite.LayeredUpdates.get_top_sprite | 返回最上面的精灵 |
pygame.sprite.LayeredUpdates.get_sprites_from_layer | 返回图层中的所有精灵,按添加方式排序 |
pygame.sprite.LayeredUpdates.switch_layer | 将精灵从 layer1 切换到 layer2 |
LayeredDirty组中主要的对象是DirtySprite,是LayeredUpdates的子类,有下列方法:文章来源地址https://www.toymoban.com/news/detail-482626.html
函数 | 描述 |
---|---|
pygame.sprite.LayeredDirty.draw | 以正确的顺序将所有精灵绘制到传递的表面上 |
pygame.sprite.LayeredDirty.clear | 用于设置背景 |
pygame.sprite.LayeredDirty.repaint_rect | 重绘给定区域 |
pygame.sprite.LayeredDirty.set_clip | 裁剪要绘制的区域 |
pygame.sprite.LayeredDirty.get_clip | 获取裁剪的区域 |
pygame.sprite.LayeredDirty.change_layer | 改变Sprite的层 |
pygame.sprite.LayeredDirty.set_timing_treshold | 以毫秒为单位设置阈值 |
到了这里,关于模块十一:sprite模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!