使用pygame.surface.subsurface() 来实现精灵动画

本文介绍如何利用pygame的subsurface()方法来创建精灵动画。与blit()不同,subsurface()方法先提取子表面,再通过Sprite或Group进行绘制。适合于制作需要不断循环的动画,如角色动作。文章通过示例代码和图形解释了subsurface()的工作原理,并强调在使用子表面动画时,需要管理好rect属性以确定动画位置。
摘要由CSDN通过智能技术生成

前两天写了一个使用blit  实现动画的文章.今天我们我们用 另一个方法surface来实现精灵动画.这两个方法本质上的区别在于.  blit()   是直接把图像绘制在surface表面.而subsurface()是先将图像提取子表面.然后通过Sprite.draw, 或者Group.draw将自表面绘制出来.

在使用的时候主要还是看个人习惯.对于我来说一般在写一些只做单词循环的动画,比如飞机爆炸产生的火花,我就用blit(),如果是需要不断循环的动画,比如英雄的动作.我喜欢用sub

关于surface.subfurface()方法的工作原理,我这里有一张简单的图来说明. 

在这里要注意的是,要使用子表面实现动画时,类中要有两个rect参数,第一个是self.rect这个rect参数是实例的rect属性,在使用sprite.draw(),或者group.draw()的时候,作为位置参数传递给方法.第二个rect参数是框架参数,也就是你要提取的一个子表面的大小.在公式中,我们用

self.frame_rect.x = (self.frame % 4) * self.frame_rect.width
self.frame_rect.y = (self.frame // 4) * self.frame_rect.height

来计算子表面框架在剪切时所处的位置.

对了这里有一个地方要说明一下.subsurface()这个方法在提取子表面的时候,默认的topleft是0,0.  也就是说,如果你想让动画绘制在屏幕某一个坐标的时候.记得要在frame_rect(子表面框架)变量声明了以后再去更改self.rect的坐标值.

完整的代码如下,这次用的是一个在网上找的爆炸火花.

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值