本章其实主要是系统的理解下Sprite精灵节点的创建,然后引入精灵节点和纹理集的概念
CCSprite 最简单的生成方式就是用一个纹理贴图。
CCSprite *_firstSp = [CCSprite spriteWithFile:@"icon.png"];
CGSize wins = [[CCDirector sharedDirector] winSize];
_firstSp.position = ccp(_firstSp.contentSize.width/2, wins.height/2);
[self addChild:_firstSp z:1];
动画帧
上面是生成精灵的最近基本的一种方式,但是很多时候,
我们的一个精灵元素不会是那种静止,单单只有一帧文件组成,
而以一个精灵帧形式出现。
精灵帧说白了就是一个动画
// CCSprite *sp = [CCSprite spriteWithFile:@"ball0.png"];
//step1:首先要有一个精灵对象,当然你也可以用上面的的方式,创建一个初始化纹理的精灵对象。按上面的方法创建的好处是,后面如果你要计算精灵位置时,能获取纹理暂居的空间大小,如果直接node的话,精灵占据空间长宽应该都是0吧。
CCSprite *sp = [CCSprite node];
sp.position = CGPointMake(200, 200);
//step2:根据文件名生成两帧文件放入数组
NSMutableArray *frames = [NSMutableArray arrayWithCapacity:2];
for (int i = 0; i<2; i++) {
//获取纹理贴图
NSString *file = [NSString stringWithFormat:@"ball%d.png",i];
CCTexture2D *text2d = [[CCTextureCache sharedTextureCache] addImage:file];
//生成精灵帧
CCSpriteFrame *frame = [CCSpriteFrame frameWithTexture:text2d rect:CGRectMake(0, 0, text2d.contentSize.width, text2d.contentSize.height)];
//放进数组中
[frames addObject:frame];
}
//step3:生成精灵帧动画动作
CCAnimation *ball = [CCAnimation animationWithSpriteFrames:frames delay:0.5];
CCAnimate *animate = [CCAnimate actionWithAnimation:ball];
CCRepeatForever* repeat = [CCRepeatForever actionWithAction:animate];
//step4:运行动画帧。
[sp runAction:repeat];
[self addChild:sp z:1];
Tips:
1.这边说一点,该方式获取动画帧是通过文件名然后去资源文件拿去取的,然后资料上什么都会告诉你一般资源的命名规则,就是以0,1,2,3,4结尾,相信大家都懂。
2.cocos2d早期版本,也就是本书所用到的库,还有
/** returns an Animation given it's name. */
-(CCAnimation*)animationByName: (NSString*) animationName;
/** adds an Animation to the Sprite. */
-(void) addAnimation: (CCAnimation*) animation;
就是能把帧动画对象存放到了精灵节点中,同样也可以获取,但是在目前的最新版本中貌似没有了该方法。
精灵节点批处理(CCSpriteBatchNode)
上面都只是针对生成一个精灵节点来说的,有时候我们会遇到场景中需要创建多个相同的精灵,
最原始的方法是我们一个创建,然后add到场景中。
而精灵节点的作用是可以把一些使用相同贴图的精灵放在一起,只进行一次渲染,减少原本我们没创建一个精灵渲染一次而需要消耗的时间。
CCSpriteBatchNode* batch = [CCSpriteBatchNode batchNodeWithFile:@"ball.png"];
[self addChild:batch];
for (int i = 0; i < 100; i++)
{
CCSprite* sprite = [CCSprite spriteWithFile:@”ball.png”];
[batch addChild:bullet];
}
CCSpriteBatchNode简单理解起来很像一个层layer,精灵添加它里面,最后它一次性渲染出来。
Tips:
1.纹理贴图必须使用同一个文件
2.每个子精灵都是用相同的z-order(深度)。
关于纹理贴图集(Texture Atlases)
简单来说,比如前面我用到两帧动画需要两个图片,
那我们加载两次来从资源文件中读取这两张图片。
为什么说纹理集的作用可以有效减少内存消耗,
这是因为ios在加载图片分配内存大小时会将图片长宽自动缩放到2的N次方,这个很好理解比如16*35的图片,加载到内存是以16*64来的。
因此说用了纹理集能减小内存了,不是说你把几个图片合成到一个一个贴图集里,它就变小了,离乱上来说还是一样大的,只不过纹理集合的话,我们只需加载一次,而如果单个加载,那么加载多次,在这多次加载造成的因“2的N次方”引发的内存消耗显然比只加载一次来的更加危险性了。
贴图纹理集,说简单就是把你原来分散的一个个小图片凭借成一个大图,工具会自动生成一个plist文件来保存每个单元贴图的大小以及以及在贴图中位置信息等。
纹理集制作工具,资料上说用Zwoptex,但是我在论坛搜索到一个“TexturePacker”。有人说要收费,但是貌似下载下来是免费的啊,难道是在appStore下载要收费~
对于贴图纹理集加载
CCSpriteFrameCache* frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];
[frameCache addSpriteFramesWithFile:@"xxxx.plist"];
这样就是把一张纹理集合加载缓存到了内存。
需要用到某个贴图时
CCSpriteFrameCache* frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];
CCSpriteFrame* frame = [frameCache spriteFrameByName:pngname];
Tips:
1.资料上说了一种简单估算一个图片会占内存大小,比如一种16*16的,那么占的内存是16*16*4=1kb(应该没错吧。呵呵,资料上说512*512*4 = 1M)。
2.CCSpriteFrameCache加载的是一张拼接过的大图,每一个小图只是大图中的一个区域,这些区域信息都在plist文件中保存。
用的时候只需要根据小图的名称就可以加载到这个区域;
CCTextureCache 是普通的图片缓存,我们所有直接加载的图片都会默认放到这个缓存中,以提高调用效率。
分享到:
相关推荐
资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...
这是书籍 Cocos2d-x实战:Lua卷(第2版)的代码,关东升老师的,这里分享出来。除了章节的小示例代码外,还有一个《迷失航线》的游戏示例代码。这是一个下载地址。
该资源主要用于cocos2d-x中Value与json字符串的相互转换,提供从json文件读取为cocos2d::Value,cocos2d::Value写入到文件,cocos2d::Value转换为json字符串,json字符串转换为cocos2d::Value。json字符串转换成cocos...
基于cocos2d的target触摸,父子精灵节点的demo
Cocos2d-x实战:C++卷(2版)源代码
如何用cocos2d制作iphone游戏:旋转炮塔,大家一起动手试试
(译)cocos2d里面如何用texture picker和像素格式来优化spritesheet.pdf (译)在cocos2d里如何制作各种按钮.pdf (译)如何使用cocos2d制作基于tilemap的游戏教程 第一部分.pdf (译)如何在cocos2d里面使用动画和...
cocos2d教程
cocos2d的学习资料,一本比较经典的cocos2d开发书,适合cocos2d/cocos2d-x的入门
如何用cocos2d制作iphone游戏:更猛的怪物和更多得管卡,大家动手试试啊
《Cocos2d-x实战 Lua卷》是介绍Cocos2d-x Lua游戏编程和开发技术的书籍,本书是第1版,带完整书签
Cocos2d-x是移动跨平台开发最流行的游戏引擎,而本书是一本很全面的、比较‘接地气’的游戏开发教程。书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关...
Cocos2D-X开发学习笔记-渲染框架之节点类的使用示例 项目中包含:源码+效果图 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9372661
Cocos2D-X开发学习笔记-渲染框架之图形的绘制 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9748001
主要参考了《3D游戏编程大师技巧》 感谢大师(André LaMothe) 感谢cocos2d-x
(译)cocos2d精灵教程:第一部分.pdf (译)cocos2d精灵教程:第三部分.pdf (译)cocos2d精灵教程:第二部分.pdf (译)cocos2d菜单教程:第一部分.pdf (译)cocos2d菜单教程:第三部分(完).pdf (译)...
Cocos2D-X开发学习笔记-渲染框架之菜单类的使用示例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9626051
Cocos2D目录: 第一章:介绍Cocos2d 第二章: 开始学习 第三章: 基础知识 第四章: 你的第一个游戏(修正错误) 第五章: 游戏构成要素 第六章: 深入了解精灵(Sprite) 第七章: 横向滚屏射击游戏 第八章: 完成滚屏射击游戏...
《Cocos2d-x实战 JS卷 Cocos2d-js开发》随书源码 ch13-ch24 下卷 因为超过csdn上传限制分为2个压缩文件
Cocos2d-x高级开发教程:制作自己的《捕鱼达人》 图书简介: 《Cocos2d-x高级开发教程:制作自己的《捕鱼达人》》是国内第一本全面深入讲解Cocos2d-x进阶内容的图书,Cocos2d-x创始人王哲作序推荐,《捕鱼达人》开发...