cocos2d-x总结(五)CCSprite精灵的加载与常用操作
2013-10-30 14:53
363 查看
文章出处:http://www.cnblogs.com/w121640121/archive/2012/02/12/2348471.html
精灵是2D游戏中得主角,这次就总结一下cocos2d-x中精灵的使用。
一,加载
首先,创建一个变量
加载函数分为两组initWithXXXX和spriteWithXXXX,其主要的区别是使用initWithXXXX的手工作业,而spriteWithXXXX是纯自动化作业。
在SpriteWithXXXX中,先分配内存,然后加载,最后加入到autorelease中。而前者只有加载的部分,分配内存以及释放都需要靠自己。下边全部以spriteWithXXXX函数说明。
1,从文件中直接加载
从文件中加载很简单,只需要
其中文件名必须是完整路径,用cocos2d-x生成的项目中Resources目录为根目录。若有一个文件目录为..\Resources\chars\a.png 则 文件名部分就应该为"chars/a.png"。值得注意的是,在WINDOWS下,后缀名大写小写无所谓,但是在MAC下,后缀的大小写必须与文件完全一致,否则无法加载。
此函数还有一个重载函数,后边多一个CCRect参数,可以通过此参数设定加载图片中某个矩形区域。
2,间接加载
有些经常被用到或者需要频繁加载移除的一些资源,如果每次都从文件中加载,程序的效率会变得非常低,通常的做法是将这些文件先读到缓存中,然后再从缓存中加载。
这个函数将一个图片加入缓存并返回一个CCTexture2D的指针。然后就可以
如果一个资源已经被加入到了缓存,addImage是不会再加一遍的。
程序中我很少会直接用spriteWithTexture这个函数,因为需要保存pTexture的指针。而在spriteWithFile函数中其内部就已经使用了上述过程。
另一种间接加载方法是利用SpriteFrame
SpriteFrame是把一个大的图片划分掉,每一个矩形区域就是一个SpriteFrame。其实如果这个SpriteFrame在大图中的矩形区域已知的话,可以直接使用CCTexture2D的方式,使用CCRect参数。SpriteFrame给我们提供了一种快捷,简便的方式,就是将这个矩形区域信息保存到plist文件中,并通过一个名称作为索引。
生成这种大图也有很多工具,我使用过两种工具,一个是 Zwoptex 是一个在线的免费工具,另一个我常用的是 TexturePacker。这是一个收费软件,不过免费版也能满足基本的需要。这两种工具可以生成一个.plist文件和一个图片文件。存放的时候讲这两个关联的文件放在同一个目录下。在需要使用的时候,我们可以将它加载到缓存中:
其中plist文件的路径是完整路径。
然后可以用两种方式加载
看起来第一个函数比较麻烦,实际上,第二个函数调用的是第一个函数。
值得说明的是,这里的szFra
4000
meName不需要完整路径,而是文件名索引。
二,常用操作
精灵加载完了就该各种使用了。
1,锚点
锚点就是所有旋转,移动,缩放的参考点。cocos2-x中默认的锚点是中心点。锚点用比例来表示范围为0-1,(0,0)点代表左下点,(1,1)代表右上点。
设置的函数为
2,旋转
其中angle为角度不是弧度。正数为顺时针旋转,负数为逆时针旋转。
3,位置
xPos和yPos为相对于父节点锚点的位置。
4,缩放
s为比例,s = 1表示原尺寸。
5,倾斜
X轴向右为正,Y轴向上为正。
6,透明度
s范围0-255,0完全透明,255完全不透明。
7,可见
bVisible为bool值,true代表可见 false代表不可见
8,翻转
bFlip为true,则图片翻转,false不翻转。
注意,翻转是针对原图片的操作,水平翻转相当于在图片编辑软件里水平翻转一样。不根据锚点进行翻转。翻转以后,设置的以前设置的锚点不会随着图片的翻转而改变。比如设置右下角为锚点,则翻转以后,锚点为翻转后的图片的右下角(是不是有点绕?)
最后,初始化完成后,不要忘了使用addChild加入到父节点,否则是不会显示的。
精灵是2D游戏中得主角,这次就总结一下cocos2d-x中精灵的使用。
一,加载
首先,创建一个变量
CCSprite *pSprite;
加载函数分为两组initWithXXXX和spriteWithXXXX,其主要的区别是使用initWithXXXX的手工作业,而spriteWithXXXX是纯自动化作业。
在SpriteWithXXXX中,先分配内存,然后加载,最后加入到autorelease中。而前者只有加载的部分,分配内存以及释放都需要靠自己。下边全部以spriteWithXXXX函数说明。
1,从文件中直接加载
从文件中加载很简单,只需要
CCSprite::spriteWithFile("文件完整名称");
其中文件名必须是完整路径,用cocos2d-x生成的项目中Resources目录为根目录。若有一个文件目录为..\Resources\chars\a.png 则 文件名部分就应该为"chars/a.png"。值得注意的是,在WINDOWS下,后缀名大写小写无所谓,但是在MAC下,后缀的大小写必须与文件完全一致,否则无法加载。
此函数还有一个重载函数,后边多一个CCRect参数,可以通过此参数设定加载图片中某个矩形区域。
2,间接加载
有些经常被用到或者需要频繁加载移除的一些资源,如果每次都从文件中加载,程序的效率会变得非常低,通常的做法是将这些文件先读到缓存中,然后再从缓存中加载。
CCTexture2D *pTexture = CCTextureCache::sharedTextureCache()->addImage(pszFilename);
这个函数将一个图片加入缓存并返回一个CCTexture2D的指针。然后就可以
pSprite = CCSprite::spriteWithTexture(pTexture);
如果一个资源已经被加入到了缓存,addImage是不会再加一遍的。
程序中我很少会直接用spriteWithTexture这个函数,因为需要保存pTexture的指针。而在spriteWithFile函数中其内部就已经使用了上述过程。
另一种间接加载方法是利用SpriteFrame
SpriteFrame是把一个大的图片划分掉,每一个矩形区域就是一个SpriteFrame。其实如果这个SpriteFrame在大图中的矩形区域已知的话,可以直接使用CCTexture2D的方式,使用CCRect参数。SpriteFrame给我们提供了一种快捷,简便的方式,就是将这个矩形区域信息保存到plist文件中,并通过一个名称作为索引。
生成这种大图也有很多工具,我使用过两种工具,一个是 Zwoptex 是一个在线的免费工具,另一个我常用的是 TexturePacker。这是一个收费软件,不过免费版也能满足基本的需要。这两种工具可以生成一个.plist文件和一个图片文件。存放的时候讲这两个关联的文件放在同一个目录下。在需要使用的时候,我们可以将它加载到缓存中:
CCSpriteFrameCache *pCache = CCSpriteFrameCache::sharedSpriteFrameCache(); pCache->addSpriteFramesWithFile("XXXX.plist");
其中plist文件的路径是完整路径。
然后可以用两种方式加载
pSprite = CCSprite::spriteWithSpriteFrame(pCache->spriteFrameByName(szFrameName)); pSprite = CCSprite::spriteWithSpriteFrameName(szFrameName);
看起来第一个函数比较麻烦,实际上,第二个函数调用的是第一个函数。
值得说明的是,这里的szFra
4000
meName不需要完整路径,而是文件名索引。
二,常用操作
精灵加载完了就该各种使用了。
1,锚点
锚点就是所有旋转,移动,缩放的参考点。cocos2-x中默认的锚点是中心点。锚点用比例来表示范围为0-1,(0,0)点代表左下点,(1,1)代表右上点。
设置的函数为
setAnchorPoint(ccp(0.5, 0.5));
2,旋转
setRotation(angle)
其中angle为角度不是弧度。正数为顺时针旋转,负数为逆时针旋转。
3,位置
setPosition(ccp(xPos, yPos))
xPos和yPos为相对于父节点锚点的位置。
4,缩放
setScale(s); // 整体缩放 setScaleX(s); // 原图片坐标X轴缩放 setScaleY(s); // 原图片坐标Y轴缩放
s为比例,s = 1表示原尺寸。
5,倾斜
setSkewX(s); // 原图片坐标X轴倾斜 setSkewY(s); // 原图片坐标Y轴倾斜
X轴向右为正,Y轴向上为正。
6,透明度
setOpacity(s);
s范围0-255,0完全透明,255完全不透明。
7,可见
setIsVisible(bVisible)
bVisible为bool值,true代表可见 false代表不可见
8,翻转
setFlipX(bFlip); // 水平翻转 setFlipY(bFlip); // 竖直翻转
bFlip为true,则图片翻转,false不翻转。
注意,翻转是针对原图片的操作,水平翻转相当于在图片编辑软件里水平翻转一样。不根据锚点进行翻转。翻转以后,设置的以前设置的锚点不会随着图片的翻转而改变。比如设置右下角为锚点,则翻转以后,锚点为翻转后的图片的右下角(是不是有点绕?)
最后,初始化完成后,不要忘了使用addChild加入到父节点,否则是不会显示的。
相关文章推荐
- cocos2d-x——使用动画缓存做动画
- iOS开发篇——cocos2d-x 瞬时动作延时动作
- cocos2d-x总结(四)win32环境下响应键盘消息
- cocos2d-x环境安装
- cocos2d-x总结(三)场景中的层(CCLayer)及其触摸消息响应
- Cocos2d-基础知识
- Cocos2d-x——HelloWorldScene.cpp的详解
- Cocos2d-x 创建精灵的4种方法
- Cocos2d-x架构介绍
- cocos2d-x.0创建工程
- 【Cocos2d-x】VS2012开发2dx无法解析的外部符号解决记录(第一篇)【转】
- cocos2dx的lua绑定
- cocos2d-x 类大全及其概要
- cocos2dx——CCProgressTimer
- 王方月 - 《君王2》与cocos2d-x的邂逅
- cocos2d的框架思路
- 关于cocos2d这个东西
- 一个cocos2d程序的完整人生(从环境到代码全过程)
- 将cocos的app直接在我的设备上测试运行
- cocos——把测试app打包成ipa文件