iOS卡通人物帧动画介绍5:让主角动起来!

熟悉CAWSpriteLayer类CAWSpriteLayer类是从CALayer类派生的。 实际上只是包装类,实际上在后面工作的是一个叫CAWSpriteCoreLayer的类,CAWSpriteCoreLayer也是从CALayer派生出来的。

通常,对于第三方库和类,您只需简单地查看接口声明,而无需过多地关注内部实现,它们基本上被用作黑匣子。 但是,在某些情况下,您可能需要稍微了解一下实现,例如,如果类缺少某些功能,需要自己添加。 稍后将尝试扩展到CAWSpriteLayer,届时将详细说明。

简单地看一下CAWSpriteLayer的接口,就可以大致了解这个类的用法。 描述上面添加的代码:

创建CAWSpriteLayer类,将纹理配置信息与纹理图像sprite=cawspritelayer ( sprite data:sprites data )相关联。 and image :将sprite添加到texture沙箱场景中sandbox view.layer.add sublayer ( sprite )//sprite的位置居中

为什么精灵在场景中显示得那么小? 此时,因为我在iPhone 6p上运行,所以这意味着为了正常显示,必须提供@3x大小的纹理素材。 否则,显示会相对缩小3倍。 不太了解这个概念的童鞋可以自己搜索一下。

有@3x的素材就完美了,但我们不是没有吗! 我们只是以解释为目的,所以丑就是丑。 如果能放大到3倍,无论分辨率变差还是模糊都可以接受。

如上所述,CAWSpriteLayer是从CALayer派生的,所以直接放大CALayer就可以了。 添加以下代码:

sprite.transform=ca transform 3d scale ( sprite.transform,3.0,3.0,1.0 ) )执行APP时,我们感觉好多了。

但是,还有另一个大问题。 它呆呆地站在那里,一点也不动!

解决很简单,超乎你的想象!

跑动画移动主角很容易,只有一句话! 在上面的代码之后立即添加以下行。

sprite.playanimation(& #039; w正%d ),withRate: 6,andRepeat: Int32.max )执行APP。 这是原地踏步的紧急关头:

是否超级简单,其背后的原理是使用CALayer上的动画,可以在CAWSpriteCoreLayer类的源代码中看到。

请注意,此处的rate表示每秒显示的秒数。 例如,这里设定为6,下面的纹理共有4帧,所以每帧显示4/6=0.67秒,合计4/6 * 4=2.67秒。 如果有合计6帧,则每1帧显示1秒,合计显示6秒。 在此,可以通过调整rate的大小来确定纹理集的动画显示。时间、动画越大显示得越快,动画越小显示得越慢。

让主角走显然不想让主角原地踏步,想让主角走。 实现也不难。 动画配合位移就好了。 首先实现向上的移动吧

首先,在ViewController类中创建Direction枚举。

enum direction { casenonecasedowncaseupcaseleftcaseright }然后为currentDirection实例创建方法。

varcurrentdirection:direction=.none然后将以下代码添加到up方法中:

@IBAction func up ( ) { if currentDirection!=.up { current direction=.up sprite.play animation ( & amp; #039; w倒车%d& #039;withRate: 6,andRepeat: Int32.max ) }sprite.posiiiite

尝试执行APP以感受效果:

哇! 我们一直以来的努力没有白费,值得鼓掌庆祝! 既然向上的放心结束了,其他的放心也不是难事。 依次补充其他三种方法。

@IBAction func down ( ) { if currentDirection!=.down { current direction=.down sprite.play animation ( & amp; #039; w正%d ),withRate: 6,andRepeat: Int32.max ) } sprite.=.left { current direction=.left sprite.play animation ( ) #039; w左%d ),withRate: 6,andRepeat: Int32.max ) } sprite.=.right { current direction=.right sprite.play animation #039; w右%d ),withRate: 6,andRepeat: Int32.max ) }sprite!

其他教程

周杰伦晒女儿沙滩照,发消息祝福阳光满角。海瑟薇戴着草帽超级可爱。

2022-12-19 5:01:34

其他教程

视频素材怎么裁剪教程,自媒体视频录屏软件

2022-12-19 5:03:38

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索