模块十一: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,主要用于追踪脏更新,只有一个方法:

与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以毫秒为单位设置阈值

Original: https://blog.csdn.net/weixin_49346755/article/details/122559653
Author: 不负韶华ღ
Title: 模块十一:sprite模块

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/779460/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球