模块十一:sprite模块

这篇具有很好参考价值的文章主要介绍了模块十一: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的子类,有下列方法:文章来源地址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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Rust 是一种面向系统编程语言 主要被设计用来解决执行速度、安全性、并发性和可靠性等方面的问题 Rust From First Principles: Building a Minimal Rust

    作者:禅与计算机程序设计艺术 Rust 是一种面向系统编程语言,主要被设计用来解决执行速度、安全性、并发性和可靠性等方面的问题。相比于其他语言来说,它拥有以下优点: 高性能: Rust 的运行时是单线程的,但是拥有基于垃圾收集(GC)的自动内存管理机制,使得在开

    2024年02月07日
    浏览(56)
  • langchain主要模块(二):数据连接

    什么是LangChain? 源起:LangChain产生源于Harrison与领域内的一些人交谈,这些人正在构建复杂的LLM应用,他在开发方式上看到了一些可以抽象的部分。一个应用可能需要多次提示LLM并解析其输出,因此需要编写大量的复制粘贴。 LangChain使这个开发过程更加简单。一经推出后,在

    2024年02月09日
    浏览(35)
  • Ansible yum模块 主要用于软件安装

    name= #所安装的包的名称 state= # present —安装, latest —安装最新的, absent — 卸载软件。 update_cache #强制更新yum的缓存 conf_file #指定远程yum安装时所依赖的配置文件(安装本地已有的包)。 disable_gpg_check #是否禁止GPG checking,只用于 present or latest 。 disablerepo #临时禁止使用yum库

    2024年02月22日
    浏览(37)
  • Electronjs入门-Electron中的主要模块

    在本节中,我们将了解在Electron中创建任何应用程序时的一些基本模块;这些模块多种多样,使我们能够轻松地进行进程通信,创建操作系统的本地菜单。 为了利用Electron模块,以及任何第三方或Node模块,不仅在主流程中,而且在渲染或网页流程中,我们需要为该流程启用与

    2024年02月07日
    浏览(41)
  • GoJS库中所有的主要模块及其概念整理

    最近在学习Gojs库,一些学习总结如下: Diagram:该模块定义了用于呈现一个可视化图表的主要组件,以及用于控制图表样式和交互的属性和方法。 Model:该模块定义了模型元素(节点和连线)的属性和数据,以及管理和保存模型状态的方法和事件。 Part:该模块定义了所有可见的

    2024年02月04日
    浏览(37)
  • 关于IDM下载器,提示:一个假冒的序列号被用来注册……&idea项目文件路径报红

    到C:WindowsSystem32driversetc 修改目录下面的hosts文件(如果没有修改的权限就右键属性hosts文件修改user的权限为完全控制),在hosts里面增加以下内容: 127.0.0.1 registeridm.com 127.0.0.1 www.registeridm.com 127.0.0.1 www.internetdownloadmanager.com 然后保存退出。再去找一个序列号: OS5HG-K90NH-SX

    2024年02月04日
    浏览(40)
  • 【PCL自学:目录】PCL简介及主要功能模块介绍 (持续更新)

    当你知道一切都不重要时,世界就是你的了。 ——《瑞克和莫蒂》S3E8   对于从事计算机视觉、机器视觉领域的从业者来说,OpenCV库并不陌生,甚至是我们入门这个领域时的学习的第一个开源库,如果说OpenCV是二维信息处理方面的工兵铲,那PCL(Point Cloud Library)就是在三维

    2024年02月06日
    浏览(51)
  • 开发一个软件的主要流程

    本文重点解决如下问题:开发一个软件的主要流程是什么? 了解开发一个软件的主要流程对于编程者而言非常重要,它能够让编程者对如何开发一个软件有个整体的认知。开发一个软件的主要流程包括:1)软件前端界面设计;2)后台功能实现;3)前端和后台联合测试;4)

    2024年02月16日
    浏览(41)
  • AutoSAR配置与实践:深入探讨NVM主要接口、模块交互和数据流向(详解)

    深入了解AutoSAR配置中的NVM主要接口、模块交互和数据流向。探讨NVM协议栈架构、主要接口、数据操作流程等内容。

    2024年02月09日
    浏览(256)
  • 第三十一章 linux-模块的加载过程一

    ps:kernel symbol内核符号表,就是在内核的内部函数或变量中,可供外部引用的函数和变量的符号表。. 其实说白了就是一个索引文件,它存在的目的就是让外部软件可以知道kernel文件内部实际分配的位置。 先来个图: 在用户空间,用insmod这样的命令来向内核空间安装一个内核

    2024年02月03日
    浏览(84)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包