cocos2d-x 精灵的创建和基本使用
在cocos2d-x中。精灵能够说是一个最重要的组成元素,它代表游戏中一个最小的可见单位。同一时候也是CCNode一个最为灵活的子类,由于它能够通过装载一个平面纹理,从而具有丰富的表现力。
在进一步说精灵之前。有限须要理解一下纹理的概念。简单直观地理解,事实上纹理就是我们通常在游戏中看到的图片,而这张图片通过精灵这个容器显示出来。
专业一点来说,纹理是openGL中绘制到物体表面上的图案。在这里仅仅简介一下,不深入了解。
精灵的创建方法比較灵活,大致能够分为下面3种方法:
1、从文件里直接创建精灵。
这样的方法非常easy,仅仅要知道文件所在的路径和名称,直接调用CCSprite的工厂方法就可以。如: CCSprite::spriteWithFile("文件完整名称"); 当中文件名称必须是完整路径,用cocos2d-x生成的项目中Resources文件夹为根文件夹。
CCSprite * sprite= CCSprite::create(pszFilename);
这样载入方式精灵会把图片的整个区域显示出来。另外也能够添加图片的显示区域这一參数。例如以下所看到的:
CCSprite * sprite= CCSprite::create(pszFilename,CCRectMake(0, 0, 30, 30));
注意这里的rect使用的是纹理坐标系,以左上角为原点。原点向右为x的正方向,原点向下为y的正方向。
上面的代码表示显示出以图片左上角为原点的30*30像素范围的图片区域。
对于常常被用到或者须要频繁载入移除的一些资源。假设每次都要从文件里载入,程序的的效率会变低,因此我们能够先把图片资源读到缓存中,再从缓存中载入。
2、通过纹理去载入。
CCTexture2D*pTexture = CCTextureCache::sharedTextureCache()->addImage(pszFilename);
这个函数将一个图片增加缓存并返回一个CCTexture2D的指针。然后就能够
CCSprite * sprite=CCSprite::spriteWithTexture(pTexture);
同方法1一样也能够通过加入显示区域的參数。
CCTextureCache是相当于CCTexture2D的容器,是内存池。当调用它的addImage函数加入图片时。会先依据图片名称去内存中查找是否已存在,是则直接取出返回。假设须要一次载入多张图片的时候,能够先把图片载入到CCTextureCache中。这样使用图片的时候速度就会非常快了。
这样的方法通经常使用于批处理。CCSpriteBatchNode用于批处理绘制精灵。主要是用来提高精灵的绘制效率的。须要绘制的精灵数量越多,效果越明显。由于cocos2d-x採用opengl es绘制图片的。opengl es绘制每一个精灵都会运行:open-draw-close流程。
而CCSpriteBatchNode是把多个精灵放到一个纹理上,绘制的时候直接统一绘制该texture,不须要单独绘制子节点。这样opengl es绘制的时候变成了:open-draw()-draw()…-draw()-close()。节省了多次open-close的时间。CCSpriteBatchNode内部封装了一个CCTextureAtlas(纹理图集,它内部封装了一个CCTexture2D)和一个CCArray(用来存储CCSpriteBatchNode的子节点:单个精灵)。(摘自Alex
zhou的博客)
3、通过帧缓存中的一帧名称去载入。
SpriteFrame是把一个大的图片划分掉。每个矩形区域就是一个SpriteFrame。事实上假设这个SpriteFrame在大图中的矩形区域已知的话,能够直接使用CCTexture2D的方式,使用CCRect參数。SpriteFrame给我们提供了一种快捷,简便的方式,就是将这个矩形区域信息保存到plist文件里,并通过一个名称作为索引。
生成这样的大图也有非常多工具,Zwoptex是一个在线的免费工具。TexturePacker一个收费软件,只是免费版也能满足主要的须要。也能够给作者发邮件获取一个license。这两种工具能够生成一个.plist文件和一个图片文件。存放的时候讲这两个关联的文件放在同一个文件夹下。
在须要使用的时候,我们能够将它载入到缓存中:
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("XX.plist");
CCSpriteFrameCache它是管理CCSpriteFrame的内存池,跟CCTextureCache功能一样,只是跟CCTextureCache不同的是,假设内存池中不存在要查找的帧,它会提示找不到。而不会去本地载入图片。
然后能够用两种方式载入
CCSprite * sprite =CCSprite::spriteWithSpriteFrame(pCache->spriteFrameByName(szFrameName));
CCSprite * sprite = CCSprite::spriteWithSpriteFrameName(szFrameName);
看起来第一个函数比較麻烦,实际上,第二个函数调用的是第一个函数。值得说明的是,这里的szFrameName不须要完整路径,而是文件名称索引。
精灵载入完了就改各种使用了。
(接下来的内容摘自Wander的博客,在此表示感谢)
。锚点
锚点就是全部旋转,移动,缩放的參考点。
cocos2-x中默认的锚点是中心点。锚点用比例来表示范围为0-1,(0,0)点代表左下点,(1,1)代表右上点。设置的函数为setAnchorPoint(ccp(0.5, 0.5));
,旋转
setRotation(angle) 当中angle为角度不是弧度。正数为顺时针旋转,负数为逆时针旋转。
。位置
setPosition(ccp(xPos, yPos)) xPos和yPos为相对于父节点锚点的位置。
,缩放
setScale(s); // 总体缩放
setScaleX(s); // 原图片坐标X轴缩放
setScaleY(s); // 原图片坐标Y轴缩放
s为比例。s = 1表示原尺寸。
,倾斜
setSkewX(s); // 原图片坐标X轴倾斜
setSkewY(s); // 原图片坐标Y轴倾斜
X轴向右为正。Y轴向上为正。
,透明度
setOpacity(s);
s范围0-255,0全然透明,255全然不透明。
。可见
setIsVisible(bVisible)
bVisible为bool值true代表可见false代表不可见
,翻转
setFlipX(bFlip); // 水平翻转
setFlipY(bFlip); // 竖直翻转
cocos2d-x 精灵的创建和基本使用的更多相关文章
- [Unity3D插件]2dtoolkit系列二 动画精灵的创建以及背景图的无限滚动
经过昨天2dtoolkit系列教程一的推出,感觉对新手还有有一定的启发作用,引导学习使用unity 2dToolKit插件的使用过程,今天继续系列二——动画精灵的创建,以及背景图的无限循环滚动,在群里 ...
- 编写MyLayer,2 锚点,3 精灵的创建,4 zorder
1 编写MyLayer 头文件:MyLayer.h #include "cocos2d.h" USING_NS_CC; //代表的是: using namespace c ...
- cocos2d-android学习四 ---- 精灵的创建
上篇文章我们创建了一个黑乎乎的界面.以下我们就给它增加一个精灵. 我们这次就一起来学习精灵的基础知识. 1.什么是精灵 游戏中全部会动的对象都是精灵,能够是主人公,背景元素,一个子弹或者是敌人. 一个 ...
- Cocos2D 指定文件夹创建项目
参考http://www.cnblogs.com/skynet/p/3428369.html 通过下面的一些改造,可以让新建的cocos2d-x项目独立于cocos2d-x引擎目录: 1) 将 ...
- Cocos2D添加精灵纹理滤镜实现图像复古效果的转换
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 大家知道Cocos2d本身是一个非常强悍的2d游戏引擎,其中自 ...
- RuPengGame游戏引擎 精灵 createSprite 创建 setSpritePosition 设置位置 playSpriteAnimate 播放动画 setSpriteFlipX设置翻转 精灵图片下载地址
package com.swift; import java.awt.Point; import com.rupeng.game.GameCore;//导入游戏引擎包 public class Gam ...
- cocos2d-x3.0创建第一个jsb游戏
第一步: 最新的cocos2d-x.下载地址https://github.com/cocos2d/cocos2d-x github上最新的引擎,值得注意的是官网上发布的引擎是稳定版.选择哪种就看个人喜 ...
- [unity3d插件]2dtoolkit系列一 创建精灵
从今天开始要做一个2d游戏,由于之前都是做cocos2dx的,然后接触了一段时间的unity3d,都是做3D方面的东西,得知要做2d游戏还是有点开心的,或许因为不想丢失之前的2d游戏的一些思想,然后接 ...
- 如何在Cocos2D 1.0 中掩饰一个精灵(六)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 掩饰一个精灵:实现代码 打开HelloWorldLayer.m并 ...
随机推荐
- C#实现环形队列
概述 看了一个数据结构的教程,是用C++写的,可自己C#还是一个菜鸟,更别说C++了,但还是大胆尝试用C#将其中的环形队列的实现写出来,先上代码: public class MyQueue<T& ...
- Abot 爬虫
Abot 爬虫分析-整体结构 1. 引言 在Github 上搜索下Web Crawler 有上千个开源的项目,但是C#的仅仅只有168 个,相比于Java 或者Python 确实少的可怜.如果按照St ...
- 如何利用Win32API取得另一支程式中的ListView內的所有值(RegisterHotKey,ReadProcessMemory,WindowFromPoint和VirtualAllocEx)
http://blog.csdn.net/shuaihj/article/details/6129506
- efwplus框架
此框架得到博客园大神@张善友的关注,建议我写一篇此框架的最新介绍,好在@dotNet跨平台公众号上推荐给大家,得到大神的指示当然激动,马不停蹄的赶出此文,供大家参考! 一.使用efwplus框架的 ...
- (step5.1.2)hdu 1305(Immediate Decodability——字典树)
题目大意:输入一系列的字符串,判断这些字符串中是否存在其中的一个字符串是另外一个字符串的前缀.. 如果是,输出Set .. is not immediately decodable 否则输出Set . ...
- 开启cocos2dx 3.0的Console功能
下面内容用于自己知识的备忘,想看具体内容,请參照例如以下地址. 原英文文地址: http://discuss.cocos2d-x.org/t/cocos3-0-tutorial-console-tut ...
- SICP 习题 (2.6) 解题总结:丘奇计数
SICP 习题 2.6 讲的是丘奇计数,是习题2.4 和 2.5的延续. 这里大师们想提醒我们思考的是"数"究竟是什么,在计算机系统里能够怎样实现"数".准备好 ...
- Linux 之 rsyslog
Linux 之 rsyslog 系统日志转发 一.rsyslog 介绍 ryslog 是一个快速处理系统日志的程序,提供了高性能.安全功能和模块化设计.rsyslog 是syslog 的升级版,它将多 ...
- DecimalFormat
public class TestDemo { public static void main(String[] args) { String format = new DecimalFormat(& ...
- Android中的动画具体解释系列【4】——Activity之间切换动画
前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自己定义动画.这一篇我们来看看怎样将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 ...