虽然在《python从入门到实践》项目实战中,运用到了pygame.sprites但是并没有介绍这个是什么东西,只是简单的引用外加调用。
相信有许多人像我一样,并不知道这个到底是啥意思,有啥作用。
下面让我来介绍一下这个在pygame中挺重要的角色/

“sprite”,中文翻译“精灵”,一般是指游戏动画中独立移动的一个画面元素,在pygame中可以是一个带有图像(Surface)和大小位置(Rect)的对象。精灵特别适合在Python语言中使用。

  1. 角色可直接拖动(compound造型不支持)。
  2. 提供像Scratch中的三种旋转模式。精灵对象的_rotatemode属性值为0,代表可360度旋转,为1时代表可左右翻转,为2时角色不会旋转。
  3. rotatemode:返回或设置旋转模式。
  4. addx:x坐标增加。
  5. addy:y坐标增加。
  6. scale:缩放,只有一个参数。
  7. gotorandom:到随机位置。
  8. heading:重定义了这个方法,不带参数能获取当前朝向。带参数参让角色朝向某对象或坐标。
  9. show:显示对象,带参数时让角色显示一定的时间后又会隐藏,异步执行。
  10. hide:隐藏对象,带参数时让角色隐藏一定的时间后又显示,异步执行。
  11. mouse_pos:获取鼠标指针坐标。
  12. move:移动水平dx距离和垂直dy距离。
  13. collide:和另一个角色或图章的碰撞方法,采用的是矩形碰撞,可以有scale参数,表示缩放绑定盒子,如scale=0.5时,绑定盒宽高各缩一半。
  14. collidemouse:碰到鼠标指针。
  15. collide_edge:碰到边缘检测。
  16. bounce_on_edge:碰到边缘就反弹,适合于用fd命令让角色前进后再使用。
  17. bbox:获取角色绑定盒,也可获取图章的绑定盒。
  18. randomcolor:随机颜色,较鲜艳。
  19. randomheading:随机方向。
  20. remove:移除方法,把自己从屏幕的_turtles列表中删除,并根据item号删除自己在画布上的形状,清除说话泡泡对象。
  21. stamp:重定义了Turtle类的图章方法,新增的参数可以让图章在一定时间后自动被清除,异步执行。
  22. stampmove:根据图章编号水平和垂直移动图章。
  23. stampgoto:移动图章编号到指定坐标,暂不支持复合图形的图章,它们的图章编号是一个元组。
  24. play:播放方法,目前只支持播放无损压缩的wav音频文件,支持显示歌词。
  25. setalpha:设置透明度方法。参数为从0到255的数值。0代表完全透明,255代表不透明,128代表半透明。对于polygon和compound造型来说,0代表透明,非0代表不透明。对于image来说,设置角色的透明度从0到255的值就会产生从透明到不透明的渐变效果。
  26. getalpha:得到透明度,从0到255的整数。
  27. set_tag:设置角色的标签。它是一个字符串,用于分组。
  28. get_tag:获取角色的标签。
  29. say:说话方法,会显示气泡。默认时间为2秒,默认阻塞进程。
  30. saycolor:返回或设置说话的字的颜色。
  31. saybordercolor:返回或设置说话泡泡的边框颜色。
  32. write:重定义写方法,增加angle参数,可以写斜字,默认为黑体,12号。
  33. reborn:“重生”方法,让角色隐藏后在另一坐标重新显示。复用角色之用,可加delay参数,意为在一定的时间后才显示,异步执行。
  34. nextcostume:下一个造型,别名是nextshape。
  35. previouscostume:上一个造型,别名是previousshape。
  36. costumeindex:指定造型编号,别名是shapeindex。
  37. update:重绘角色。

具体的功能就是上面这37个列出的功能了。
具体使用的话,看看下面的这个例子:
def check_fleet_edges(ai_settings, aliens):
"""有外星人到达边缘时采取相应的措施"""
for alien in aliens.sprites():
if alien.check_edges():
change_fleet_direction(ai_settings, aliens)
break
def change_fleet_direction(ai_settings, aliens):
"""将整群外星人下移,并改变它们的方向"""
for alien in aliens.sprites():
alien.rect.y += ai_settings.fleet_drop_speed
ai_settings.fleet_direction *= -1
def update_aliens(ai_settings, aliens):
"""检查是否有外星人位于屏幕边缘,并更新整群外星人的位置"""
check_fleet_edges(ai_settings, aliens)
aliens.update()

这个例子呢,就是外星人大战飞船的进阶版,生成外星人,然后根据外星人的移动来进行改变他们的方向。
在check_fleet_edges()中,我们遍历外星人群,并对其中的每个外星人调用check_edges()。如果check_edges()返回True,我们就知道相应的外星人位于屏幕边缘,需要改变外星人群的方向,因此我们调用change_fleet_direction()并退出循环。在change_fleet_direction()中,我们遍历所有外星人,将每个外星人下移fleet_drop_speed设置的值;然后,将fleet_direction的值修改为其当前值与-1的乘积。
其实sprite相当于一个便捷的类让我们的图像来与其他的进行交互,不过其实具体的使用方法还是要看官方文档的,官方文档入口。

本文作者:博主:     文章标题:python sprites介绍
本文地址:https://zjzdmc.top/jsfx/43.html     
版权说明:若无注明,本文皆为“Datehoer的Blog-个人博客-技术分享”原创,转载请保留文章出处。
最后修改:2021 年 04 月 20 日 10 : 15 AM
如果觉得我的文章对你有用,请随意赞赏