【Cocos2d-x游戏引擎开发笔记(22)】TexturePacker的使用
2013-03-16 13:45
465 查看
原创文章,转载请标明出处:/article/1389500.html。
首先要解释一下,为什么要使用TexturePacker?
这是应为我们做的游戏最终要运行在Android手机或者苹果手机上,而Android或者ios系统使用的是OpenGL ES来渲染。所以我们要针对OpenGL ES来进行优化。
内存方面,OpenGL ES纹理要求宽和高都是2的n次幂的倍数。想一想,如果图片的宽为33,而高为65,那么图片加载到内存后的大小为多少?考虑到宽和高都是2的n次幂,所以加载到内存后的大小是64*128。所以我们可以考虑将小的图片拼成到的图片,然后加载。
渲染速度方面,OpenGL ES要求切换的纹理少,所以将图片拼成大图片,这样就减少了纹理的切换。
所以使用TexturePacker是很有必要的。
打开TexturePacker,点击Add Folder,将图片全部加载进来。注意:我们应该事先将要拼凑的图片放到同一个文件夹下。
这样。TexturePacker就自动将我们要拼凑的图片拼成了一个大图,并且大图的宽和高都是2的n次幂的倍数。
下面设置输出格式:
Texture format设置成PNG。然后选择Data file和Texture file的保存位置。点击工具栏上的Publis。这样我们就得到了plist文件和png文件。
下面就是在cocos2d-x中使用这两个文件。
将这两个文件复制到Resources文件夹中。
使用下面的代码加载着两个文件
接着创建一个CCSpriteBatchNode,将要渲染的精灵加载到CCSpriteBatchNode。
然后就是创建精灵并且加载精灵了。
其中“bird.png”是小图片的名字。注意:CCSpriteBatchNode中的Sprite都要用同一个纹理。
最后上传代码:点击打开链接。
首先要解释一下,为什么要使用TexturePacker?
这是应为我们做的游戏最终要运行在Android手机或者苹果手机上,而Android或者ios系统使用的是OpenGL ES来渲染。所以我们要针对OpenGL ES来进行优化。
内存方面,OpenGL ES纹理要求宽和高都是2的n次幂的倍数。想一想,如果图片的宽为33,而高为65,那么图片加载到内存后的大小为多少?考虑到宽和高都是2的n次幂,所以加载到内存后的大小是64*128。所以我们可以考虑将小的图片拼成到的图片,然后加载。
渲染速度方面,OpenGL ES要求切换的纹理少,所以将图片拼成大图片,这样就减少了纹理的切换。
所以使用TexturePacker是很有必要的。
打开TexturePacker,点击Add Folder,将图片全部加载进来。注意:我们应该事先将要拼凑的图片放到同一个文件夹下。
这样。TexturePacker就自动将我们要拼凑的图片拼成了一个大图,并且大图的宽和高都是2的n次幂的倍数。
下面设置输出格式:
Texture format设置成PNG。然后选择Data file和Texture file的保存位置。点击工具栏上的Publis。这样我们就得到了plist文件和png文件。
下面就是在cocos2d-x中使用这两个文件。
将这两个文件复制到Resources文件夹中。
使用下面的代码加载着两个文件
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("last.plist","last.png");
接着创建一个CCSpriteBatchNode,将要渲染的精灵加载到CCSpriteBatchNode。
CCTexture2D *texture=CCTextureCache::sharedTextureCache()->textureForKey("last.png"); CCSpriteBatchNode *node=CCSpriteBatchNode::batchNodeWithTexture(texture); addChild(node);
然后就是创建精灵并且加载精灵了。
CCSprite *s1=CCSprite::createWithSpriteFrameName("bird.png"); s1->setPosition(ccp(35,32.5)); node->addChild(s1); CCSprite *s2=CCSprite::createWithSpriteFrameName("cat.png"); s2->setPosition(ccp(100,100)); node->addChild(s2);
其中“bird.png”是小图片的名字。注意:CCSpriteBatchNode中的Sprite都要用同一个纹理。
最后上传代码:点击打开链接。
相关文章推荐
- 【Cocos2d-x游戏引擎开发笔记(22)】TexturePacker的使用
- 【Cocos2d-x游戏引擎开发笔记(1)】HelloWorld
- 【Cocos2d-x游戏引擎开发笔记(4)】系统动画
- 【Cocos2d-x游戏引擎开发笔记(11)】粒子系统----实现下雪效果
- 【Cocos2d-x游戏引擎开发笔记(3)】在屏幕上渲染菜单并添加消息响应
- 【Cocos2d-x游戏引擎开发笔记(10)】自定义场景和场景跳转
- 【Cocos2d-x游戏引擎开发笔记(15)】Tiled Map Editor(三)
- 【Cocos2d-x游戏引擎开发笔记(6)】触屏事件与多媒体 (转)
- 【Cocos2d-X开发学习笔记】第28期:游戏中音乐和音效的使用
- 【Cocos2d-x游戏引擎开发笔记(5)】自定义动画
- 【Cocos2d-x游戏引擎开发笔记(10)】自定义场景和场景跳转
- 【Cocos2d-x游戏引擎开发笔记(4)】系统动画
- 【Cocos2d-x游戏引擎开发笔记(16)】动画速度的控制
- 【Cocos2d-html5游戏引擎学习笔记(1)】游戏引擎初探究和搭建开发环境
- 【Cocos2d-x游戏引擎开发笔记(11)】粒子系统----实现下雪效果
- 使用Cocos2d游戏引擎开发火热的植物大战僵尸游戏
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第六课: Cocos2D-X引擎框架1
- 【Cocos2d-x游戏引擎开发笔记(17)】实现运动的尾巴效果
- 【Cocos2d-x游戏引擎开发笔记(23)】多线程以及线程同步
- 【Cocos2d-X开发学习笔记】第28期:游戏中音乐和音效的使用