模块十一:sprite模块

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,它有下列方法:

函数描述
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的子类,有下列方法:

函数描述
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以毫秒为单位设置阈值
  • 4
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不负韶华ღ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值