看完笨木头有感。
2014-05-01 20:02
211 查看
1. 关于单例类
Cocos2d-x(以后简称cs-x)有不少单例类,比如获取导演类:
上面的语句是获取屏幕大小的对象,因为屏幕是受导演控制的,所以通过导演来获取屏幕大小。而获取导演的方式是sharedDirector,在cs-x中,通常都是通过shared***方法来获取某个类的单例。
2. 创建最简单的精灵
cs-x中要创建一个精灵,很简单(别人帮你封装好了,你当然简单,噗~)
顺便一提,spriteWithFile是静态方法。
spriteWithFile,顾名思义,就是直接通过一张图片来创建一个精灵。
噗,再顺便一提,这个精灵不会动(只有一张图片,于是当然不会动= =)
3. 使用TexturePacker组合图片,节省空间和内存
TexturePacker可以为cs-x生成两个文件:*.plist和*.png,cs-x已经写了专门的类去处理了。
看看下面的代码:
看看,shared*函数又出现了,证明了CCSpriteFrameCache是一个单例类,就我现在所知,它是CCSpriteFrame缓存池,至于CCSpriteFrame是什么,我现在还不太清楚。
然后用addSpriteFramesWithFile方法把images.png图片里的所有小图片生成对应的
CCSpriteFrame对象,存放到缓存池里。
4. 从CCSpriteFrameCache缓存池里取得CCSpriteFrame创建精灵对象
之前的spriteWithFile改成了spriteWithSpriteFrameName,顾名思义,这次是通过CCSpriteFrame对象来创建一个CCSprite精灵对象。
通过小图片的名称在CCSpriteFrameCache缓存池里取得CCSpriteFrame对象,再把这个CCSpriteFrame对象赋给CCSprite。
5. CCSpriteBatchNode,减少glDrawArray的次数(批次渲染)
文中说,“我们已经逹到了节省内存和减少纹理切换,最後一个我们想做的优化是减少
glDrawArray的次数,而我们所运用的技巧,就是批次渲染(Batch
Rendering), cocos2d
提供了CCSpriteBatchNode来方便大家做有关的处理,
CCSpriteBatchNode里的CCSprite都是要用同一个纹理的,所以我们在建立一个
CCSpriteBatchNode是要给它一个纹理,再把它加到
Layer里”。
批次渲染是什么东西?好像是3D里面的知识,百度了一会,我现在还无法理解。
使用批次渲染很简单,先利用组合的图片去生成一个CCTexture2D对象,再利用这个
Texture2D对象生成CCSpriteBatchNode对象:
然后还是用spriteWithSpriteFrameName方法生成CCSprite对象,但是,要注意,
CCSpriteBatchNode对象已经添加到场景中了,所以对使用同一个纹理(我也不知道什么
是使用同一个纹理,总之,在同一张大图里的小图片就是同一个纹理了)的精灵对象,直接添加到CCSpriteBatchNode对象中,而不是添加到场景中。
更完整的流程:
Cocos2d-x(以后简称cs-x)有不少单例类,比如获取导演类:
CCSize size = CCDirector::sharedDirector()->getWinSize(); |
2. 创建最简单的精灵
cs-x中要创建一个精灵,很简单(别人帮你封装好了,你当然简单,噗~)
CCSprite* pSprite = CCSprite::spriteWithFile("Background.png"); |
spriteWithFile,顾名思义,就是直接通过一张图片来创建一个精灵。
噗,再顺便一提,这个精灵不会动(只有一张图片,于是当然不会动= =)
3. 使用TexturePacker组合图片,节省空间和内存
TexturePacker可以为cs-x生成两个文件:*.plist和*.png,cs-x已经写了专门的类去处理了。
看看下面的代码:
CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache(); cache->addSpriteFramesWithFile("images.plist", "images.png"); |
然后用addSpriteFramesWithFile方法把images.png图片里的所有小图片生成对应的
CCSpriteFrame对象,存放到缓存池里。
4. 从CCSpriteFrameCache缓存池里取得CCSpriteFrame创建精灵对象
CCSprite* pSprite = CCSprite::spriteWithSpriteFrameName("Background.png"); |
通过小图片的名称在CCSpriteFrameCache缓存池里取得CCSpriteFrame对象,再把这个CCSpriteFrame对象赋给CCSprite。
5. CCSpriteBatchNode,减少glDrawArray的次数(批次渲染)
文中说,“我们已经逹到了节省内存和减少纹理切换,最後一个我们想做的优化是减少
glDrawArray的次数,而我们所运用的技巧,就是批次渲染(Batch
Rendering), cocos2d
提供了CCSpriteBatchNode来方便大家做有关的处理,
CCSpriteBatchNode里的CCSprite都是要用同一个纹理的,所以我们在建立一个
CCSpriteBatchNode是要给它一个纹理,再把它加到
Layer里”。
批次渲染是什么东西?好像是3D里面的知识,百度了一会,我现在还无法理解。
使用批次渲染很简单,先利用组合的图片去生成一个CCTexture2D对象,再利用这个
Texture2D对象生成CCSpriteBatchNode对象:
CCTexture2D *texture = CCTextureCache::sharedTextureCache()->textureForKey("images.png"); CCSpriteBatchNode *spriteBatch = CCSpriteBatchNode::batchNodeWithTexture(texture); addChild(spriteBatch); |
CCSpriteBatchNode对象已经添加到场景中了,所以对使用同一个纹理(我也不知道什么
是使用同一个纹理,总之,在同一张大图里的小图片就是同一个纹理了)的精灵对象,直接添加到CCSpriteBatchNode对象中,而不是添加到场景中。
更完整的流程:
CCTexture2D *texture = CCTextureCache::sharedTextureCache()->textureForKey("images.png"); CCSpriteBatchNode *spriteBatch = CCSpriteBatchNode::batchNodeWithTexture(texture); addChild(spriteBatch); CCSprite* pSprite = CCSprite::spriteWithSpriteFrameName("Background.png"); spriteBatch->addChild(pSprite, 0); |
相关文章推荐
- 看完《objective-c 编程之道》有感
- 看完阿里云的Hadoop云梯集群设计思路有感
- 看完色戒有感
- 看完微软的关于WINCE的webcasts有感
- 看完阿里云的haddop云梯集群设计思路有感
- 看完《毕业时刻》有感,随便写点
- 看完“最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用” 有感
- 我们应该如何对待开源?——看完ssh有感
- 我们应该如何对待开源?——看完ssh有感
- 狼群中等级制度 - 看完探索栏目我与狼群有感
- 看完锤子手机发布会直播 有感
- 看完锤子手机公布会直播 有感
- 看完《雪国列车》有感
- 看完一部好电影有感!
- 看完23岁的我在干嘛之后有感
- 看完电影有感。。。。。
- 我们应该如何对待开源?——看完ssh有感
- TCP/IP协议的生命力----读《DARPA协议结构的设计哲学》有感
- 看完这篇文章才对GIT有了大彻大悟的认识
- 2011-03-19有感