[Cocos2D-x For WP8]Sprite精灵
精灵(Sprite)是游戏里面的角色,比如敌人,游戏里面运动的物体等等,所以精灵是游戏里面一个非常常见的概念,几乎无处不在。在Cocos2D-x里面精灵是用CCSprite类来进行表示的,它可以用一张图片或者一张图片的一块矩形部分来定义。我们可以通过下面的代码用一张图片资源创建一个精灵,然后把它添加到游戏中:
CCSprite *b = CCSprite::create("cat.png");
b->setPosition(ccp(s.width * 0.5, s.height * 0.5));
如果你需要生成多个相同的精灵那么就可以利用精灵批处理类CCSpriteBatchNode类来进行处理,那么这样的处理方式可以提高精灵的绘制效率的,需要绘制的精灵数量越多,效果越明显。CCSpriteBatchNode是把多个精灵放到一个纹理上,绘制的时候直接统一绘制该纹理,不需要单独绘制子节点,这样绘制的时候就可以节省了多次对图片资源重复打开关闭的时间。CCSpriteBatchNode内部封装了一个CCTextureAtlas(纹理图集,它内部封装了一个CCTexture2D)和一个CCArray(用来存储CCSpriteBatchNode的子节点:单个精灵)。注意:因为绘制的时候只open-close一次,所以CCSpriteBatchNode对象的所有子节点都必须和它是用同一张图片。
不过使用CCSpriteBatchNode有一个限制,就是所使用的图片必须来自同一个文件,如果使用一张图片来创建精灵,你将不能指定精灵的深度,这样,所有的精灵都必须在同一渲染层,不过你可以使用贴图集来避免这个问题,如果你的所有贴图都在同一个文件里,那么你只需创建一个CCSpriteBatchNode就可以了。纹理贴图集是将我们需要的部分图片放在一张大小固定的图片,可以节约内存。因为OpenGL 机制会把单张图处理成相应大小的长宽都是2 的n 次方的图片,所以把图片放在一起可以节约空间。可以使用Zwoptex工具来制作这样的贴图。
贴图类CCTexture2D 是关于OpenGL 的概念。在OpenGL 中称图片为贴图,在Cocos2D-x 中CCTexture2D 就是图片对象的意思,可以通过它创建精灵等对象。CCTexture2D 类是精灵类和其相关类的基础。
那么除此之外还有精灵帧类CCSpriteFrame,精灵帧缓存类CCSpriteFrameCache。精灵帧的概念是相对于动画而产生的。一个精灵是固定的节点,它可以拥有许多精灵帧(CCSpriteFrame),在它们之间切换就形成了动画。精灵帧缓存类CCSpriteFrameCache 用来存储精灵帧,提前缓存起来有助于提高程序的效率。 CCSpriteFrameCache是一个单例模式,不属于某个精灵,是所有精灵共享使用的。
下面我们通过示例来用一张贴图来生成精灵:
TestLayer::TestLayer()
{
CCSize s = CCDirector::sharedDirector()->getWinSize();
//通过图片创建2D纹理
CCTexture2D *texture = CCTextureCache::sharedTextureCache()->addImage("dragon_animation.png");
// 通过2D纹理来创建精灵帧,可以通过矩形坐标来截取2D纹理的某个区域
CCSpriteFrame *frame0 = CCSpriteFrame::createWithTexture(texture, CCRectMake(*, *, , ));
CCSpriteFrame *frame1 = CCSpriteFrame::createWithTexture(texture, CCRectMake(*, *, , ));
CCSpriteFrame *frame2 = CCSpriteFrame::createWithTexture(texture, CCRectMake(*, *, , ));
CCSpriteFrame *frame3 = CCSpriteFrame::createWithTexture(texture, CCRectMake(*, *, , ));
CCSpriteFrame *frame4 = CCSpriteFrame::createWithTexture(texture, CCRectMake(*, *, , ));
CCSpriteFrame *frame5 = CCSpriteFrame::createWithTexture(texture, CCRectMake(*, *, , ));
//通过精灵帧创建精灵
CCSprite* sprite0 = CCSprite::createWithSpriteFrame(frame0);
sprite0->setPosition( ccp( , s.height/) );
addChild(sprite0); CCSprite* sprite1 = CCSprite::createWithSpriteFrame(frame1);
sprite1->setPosition( ccp(, s.height/) );
addChild(sprite1); CCSprite* sprite2 = CCSprite::createWithSpriteFrame(frame2);
sprite2->setPosition( ccp(, s.height/) );
addChild(sprite2); CCSprite* sprite3 = CCSprite::createWithSpriteFrame(frame3);
sprite3->setPosition( ccp(, s.height/) );
addChild(sprite3); CCSprite* sprite4 = CCSprite::createWithSpriteFrame(frame4);
sprite4->setPosition( ccp(, s.height/) );
addChild(sprite4); CCSprite* sprite5 = CCSprite::createWithSpriteFrame(frame5);
sprite5->setPosition( ccp(, s.height/) );
addChild(sprite5);
}
贴图的图片:

运行的效果:

[Cocos2D-x For WP8]Sprite精灵的更多相关文章
- Cocos2d-JS中的Sprite精灵类
精灵类是cc.Sprite,它的类图如下图所示.cc.Sprite类直接继承了cc.Node类,具有cc.Node基本特征. 创建Sprite精灵对象 创建精灵对象可以使用构造函数实现,它们接受相同的 ...
- Unity3D NGUI Sprite精灵动画
NGUI 2.6.1下载: part1 part2 NGUI 实现Sprite精灵动画很简单: 1.先制作图像集合.打开NGUI菜单下Atlas Maker,选中切好的图片,点击Add/Update按 ...
- WebGL之sprite精灵效果显式数字贴图
接着前一篇<WebGL实现sprite精灵效果的GUI控件>,我们继续开发我们的数字系统GUI控件,因为这套数字系统是基于sprite效果的,所以数字随相机转动而旋转(永远面对相机),随场 ...
- WebGL实现sprite精灵效果的GUI控件
threejs已经有了sprite插件,这就方便了three的用户,直接可以使用threejs的sprite插件来制作GUI模型.sprite插件是阿里的lasoy老师改造过的,这个很厉害,要学习一哈 ...
- Cocos2d-x Lua中Sprite精灵类
精灵类是Sprite,它的类图如下图所示. Sprite类图 Sprite类直接继承了Node类,具有Node基本特征.此外,我们还可以看到Sprite类的子类有:PhysicsSprite和Skin ...
- 使用雪碧图Css Sprite精灵 | 加速网页响应速度
什么是CSS Sprite精灵? 是用于前端的一种图片应用技术,通常情况,我们的开发的网页或许有很多张图片,假如在一个页面上有50多张小图片,这意味着浏览器要逐个下载50张图片.Css Sprite它 ...
- cocos2d-x 3.1.1 学习笔记[2]Sprite 精灵
Sprite应该是用到最多的一个类吧.无法想像一个游戏没有精灵将怎样进行愉快的玩耍. Sprite继承于Node 和 TextureProtocol. Sprite是一个2d的图像. Sprite能够 ...
- Python游戏引擎开发(五):Sprite精灵类和鼠标事件
本次来实现Sprite类和鼠标事件. 说起这个Sprite啊,涉及过2D游戏研究领域的看官应该都听说过它. 它中文原意是"精灵",只是在不同人的眼中,它所表示的意义不同. 比方说在 ...
- cocos2dx 3.x以上(Sprite精灵类的相关属性与创建)
// // MainScene.cpp // helloworld // // Created by apple on 16/9/19. // // #include "MainSce ...
随机推荐
- Android屏幕旋转总结
转自:http://www.myexception.cn/operating-system/1452058.html 1. ProjectConifg.mk中定义宏MTK_LCM_PHYSICAL_R ...
- JAVA基础学习之IP简述使用、反射、正则表达式操作、网络爬虫、可变参数、了解和入门注解的应用、使用Eclipse的Debug功能(7)
1.IP简述使用//获取本地主机ip地址对象.InetAddress ip = InetAddress.getLocalHost();//获取其他主机的ip地址对象.ip = InetAddress. ...
- Pyqt 屏幕截图工具
从Pyqt的examples中看到一段截图代码, (路径:examplas\desktop\screenshot.py) 所以想自己UI下界面,手动练习下 通过UI生成的: Screenshot.py ...
- Object.create 函数 (JavaScript)
创建一个具有指定原型且可选择性地包含指定属性的对象. 语法 Object.create(prototype, descriptors) 参数 prototype 必需. 要用作原型的对象. 可以为 ...
- 湘潭邀请赛 Hamiltonian Path
湘潭邀请赛的C题,哈密顿路径,边为有向且给定的所有边起点小于终点,怎么感觉是脑筋急转弯? 以后一定要牢记思维活跃一点,把复杂的事情尽量简单化而不是简单的事情复杂化. #include<cstdi ...
- 利用YaHoo YUI实现Javascript CSS 压缩 分类: C# 2014-07-13 19:07 371人阅读 评论(0) 收藏
网站优化时,往往需要对js文件,css文件进行压缩,以达到减少网络传输数据,减少网页加载时间:利用YaHoo的YUI可以实现Javascript,CSS,压缩,包括在线的js压缩和程序压缩,发现C#也 ...
- 7-14 EXISTS子查询
EXISTS: 只注重于子查询是否有返回行,如果查有返回行返回结果为值,否则为假 并不使用子查询的结果,仅用于测试子查询是否有返回结果. 语法: IF EXISTS (子查询) BEGIN 语句块 E ...
- 制作U盘启动系统盘
下载ULtraISO,安装之后,先打开一个iso系统文件,然后选中菜单“启动”下的“写入硬盘映像”
- Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构
分享两篇Win 10应用开发的XML文档结构:Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构. Win 10 开发中Adapt ...
- 汇编学习(六)——代码转换程序
(一)逻辑运算指令 一.双操作数逻辑运算指令 1.指令格式: AND dst,src ; "与"运算, OR dst,src ; "或"运算 XOR dst,s ...