优化

1.之前


学习

1.Sprite 与 SpriteFrame 图片的缓存

sprite->getSpriteFrame() 得到 SpriteFrame
Sprite::createWithSpriteFrame(spriteframe) 创建 sprite

2.Sprite 与 RenderTexture 把纹理渲染到手机上

RenderTexture* render =RenderTexture::create(sprite->getContentSize().width, sprite->getContentSize().height,
Texture2D::PixelFormat::RGBA8888)
render->begin()
sprite->visit() 渲染sprite及他的孩子
render->end()

3.RenderTexture 与 Image

render->newImage() 得到Image:图片属性信息

4.Texture2D 纹理

图片的纹理,一个从纹理缓存里得到图片纹理 TextureCache 方法 addImage(“xxx.png”)
纹理其实就是一块内存!这块内存中存放的是按照指定的像素格式填充的图片像素信息。

5.TextureCache

(1)添加图片到缓存
(2)图片以纹理(Texture2D)的形式存在缓存里
(3)通过RenderTexture 渲染此图片纹理
第一次使用image.png这图片有两个步骤,一个是先将图片加载进TextureCache缓存中,下一步是绘制图片,从而将其显示在场景中。
第二次使用image.png时,因为之前image.png已经被放入TextureCache中,所以这里只需从缓存中找到这张图片,然后将其绘制出来就可以。
6.SpriteFrameCache
跟TextureCache不同的是,如果内存池中不存在要查找的图片,它会提示找不到,而不会去本地加载图片。
7.AnimationCache
对于精灵动画,每次创建时都需要加载精灵帧,然后按顺序添加到数组,再用Animation读取数组创建动画。这是一个非常烦琐的计算过程。
8.使用大图的好处
(1)减少文件读取次数,读取一张图片比读取一堆小文件要快。
(2)减少OpenGL ES绘制调用并且加速渲染。
(3)减少内存消耗。OpenGL ES 1.1仅仅能够使用2的n次幂大小的图片,如果图片大小不够则会开出多余的内存。
OpenGL ES 2.0,它不会再分配2的几次幂的内存块了


2.帧动画


1.plist实现贞播放动画原理(个人猜测)

1.把大的 png 放到内存
2.根据plist里的 rect 在内存里切大的png(重新渲染)
3.把 2 切出的小图片制作成精灵,并设置成透明
4.通过图片名,在plist里找到对应的rect,创建一个父精灵(自己创建)
5.从 4 得到的精灵,是 3 所有精灵的父亲
6.其他精灵的 action 实际上只是父精灵的 action

7.定时切换,此时父精灵一直是透明的,其他精灵按照定的时间,在数组里遍历只有一个设置成不透明的。
把所有切出来的小精灵放到一个动画数组里,最终成为一个action = cc.FadeIn:create(),
数组里的动画只能是,播固定次数还是永久播放,那些移动等的 action 只靠父精灵完成

2.不用plist实现贞动画

1.大图片放到内存,可能不止一个
local textureDog = cc.Director:getInstance():getTextureCache():addImage(“dog.png”)

2.切图渲染
local frame0 = cc.SpriteFrame:createWithTexture(textureDog, rect)
local frame1 = cc.SpriteFrame:createWithTexture(textureDog, rect)

3.切图渲染数组动画
local tab = {frame0,frame1}
local animation = cc.Animation:createWithSpriteFrames(tab, 0.25)
local animate = cc.Animate:create(animation)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值