`
mmdev
  • 浏览: 12890762 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Cocos2d-x初入学堂(3)-->TexturePacker非常棒的图像处理工具

 
阅读更多

欢迎转载!转载时请注明出处:http://blog.csdn.net/aa4790139/article/details/8106993

如果你还没接触到过这个工具,那你今天运气非常好了...

下载地址:http://www.codeandweb.com/texturepacker

说明:这款软件需要购买的,能够发一百多块买到这么好的工具还是挺值得,可以工具的价钱,肯定他带给的的好处远不止这个数字..呵呵!

1、为什么要用这个工具呢?有什么好处?

第一点:内存问题, OpenGL ES 纹理的宽和高都要是2次幂数, 以刚才的例子来说,假如 start.png 本身是 480x320, 但在载入内存後, 它其实会被变成一张 512x512 的纹理, 而start.png 则由 101x131 变成 128x256, 默认情况下面,当你在cocos2d里面加载一张图片的时候,对于每一个像素点使用4个byte来表示--1个byte(8位)代表red,另外3个byte分别代表green、blue和alpha透明通道。这个就简称RGBA8888。

因此,如果你使用默认的像素格式来加载图片的话,你可以通过下面的公式来计算出将要消耗多少内存来加载:

  图像宽度(width)×图像高度(height)×每一个像素的位数(bytes per pixel) = 内存大小

  此时,如果你有一张512×512的图片,那么当你使用默认的像素格式去加载它的话,那么将耗费

  512×512×4=1MB(好多啊!)

第二点:再看看关於渲染速度方面, OpenGL ES 上来说我们应该尽量减少渲染时切换纹理和 glDrawArray 的呼叫, 刚才的例子每画一个图像都会切换一次纹理并呼叫一次 glDrawArray , 我们这里只画3样东西, 所以不会看到有什麽问题, 但如果我们要渲染几十个甚至几百个图像 , 速度上就会被拖慢. 很明显这并不是我们所想要的..

估计就这两点就说服了你吧~ 至少我是了...呵呵!

2、认识TexturePacker的界面

我框出来的都是我们常用和一些必须点到的地方

Data Format:导出什么引擎数据,默认cocos2d,下拉列表中有很多,基本常用的引擎都支持了

Data File :导出文件位置(后缀名.plist)

Texture Format:纹理格式,默认png

Image format:图片像素格式,默认RGBA8888...根据对图片质量的需求导出不同的格式

Dithering:抖动,默认NearestNeighbour,(如果图像上面有许许多多的“条条”和颜色梯度变化)将其修改成FloydSteinberg+Alpha;

Scale: 让你可以保存一个比原始图片尺寸要大一点、或者小一点的spritesheet。比如,如果你想在spritesheet中加载“@2x"的图片(也即为Retina-display设备或者ipad创建的)。但是你同时也想为不支持高清显示的iphone和touch制作spritesheet,这时候只需要设置scale为 1.0,同时勾选autoSD就可以了。也就是说,只需要美工提供高清显示的图片,用这个软件可以自己为你生成高清和普清的图片。

Algorithm TexturePacker:里面目前唯一支持的算法就是MaxRects,即按精灵尺寸大小排列,但是这个算法效果非常好,因此你不用管它。

Border/shape padding: 即在spritesheet里面,设置精灵与精灵之间的间隔。如果你在你的游戏当中看到精灵的旁边有一些“杂图”的时候,你就可以增加这个精灵之间的间隔。

Extrude: 精灵边界的重复像素个数. 这个与间隔是相对应的--如果你在你的精灵的边边上看到一些透明的小点点,你就可以通过把这个值设设置大一点。

Trim: 通过移除精灵四周的透明区域使之更好地放在spritesheet中去。不要担心,这些透明的区域仅仅是为了使spritesheet里面的精灵紧凑一点。--当你从cocos2d里面去读取这些精灵的时候,这些透明区域仍然在寻里。(因为,有些情况下,你可能需要这些信息来确定精灵的位置)

Shape outlines: 把这个选项打开,那么就能看到精灵的边边。这在调试的时候非常有用。

AddSprite:添加图片Add Folder:根据文件夹添加图片

Publish:导出资源文件(.plist和png)

3、程序中更改资源加载方式

我就是用的上一个例子,然后将start.png,grossinis.png,grossinis_sister1.png,grossinis_sister2.png打包成一个image.plist和image.png.程序我就不重新全部上传了,就自上传和上一个例子不同的地方,没有的朋友就可以去第一篇文章下载工程,今后我们还会用到的,会用这个工程来开发我们的第一个游戏...游戏暂时保密...呵呵!

SpriteTestLayer.cpp(就只改了这个这个文件

#include "SpriteTestLayer.h"


SpriteTestLayer::SpriteTestLayer(void)
{
}

bool SpriteTestLayer::init()
{
	CCSize s=CCDirector::sharedDirector()->getWinSize();
	
	//第一种加载资源方式
	//CCSprite* sprite=CCSprite::create("start.png");
	//第二种加载资源方式
	CCSpriteFrameCache *cache=CCSpriteFrameCache::sharedSpriteFrameCache();
	cache->addSpriteFramesWithFile("image.plist","image.png");
	CCTexture2D *texture = CCTextureCache::sharedTextureCache()->textureForKey("image.png"); 
    CCSpriteBatchNode *spriteBatch = CCSpriteBatchNode::batchNodeWithTexture(texture); 
    addChild(spriteBatch); 
	CCSprite* sprite=CCSprite::spriteWithSpriteFrameName("start.png");
	/*
		加载pvr压缩格式文件方式:注意此种方法不可以像上面打成一个文件,然后根据名字来索引对应的图片
		如果在AndEngine中使用,然后利用TexturePacker是可以导出三个文件格式的,就是多出来了一个xml文件
		保存着索引子图片的索引,已经图片位置等信息,cocos2dx的test也没有找到相应的例子,只有单独一个
		精灵才用到了加载pvr这种格式,可能cocos2dx却没有导出这个xml,也可能是这个原因吧!
		
		//第一种方式:
		CCSprite* sprite=CCSprite::create("image.pvr.ccz");
		//第二种方式:
		CCTexture2D *texture;
		CCTextureCache *cache=CCTextureCache::sharedTextureCache();
		texture=cache->addImage("image.pvr.ccz");
		CCSprite* sprite=CCSprite::create(texture);*/

	sprite->setAnchorPoint(ccp(0,1));//设置sprite的描点,(0,1)也就是图片的左上角
	sprite->setPosition(ccp(0,s.height));//设置sprite位置
	this->addChild(sprite);

	//sprite的一些基本的操作:缩放、旋转、混色
	m_tamara=CCSprite::spriteWithSpriteFrameName("grossini.png");
	m_tamara->setScaleX( 2.5f);
    m_tamara->setScaleY( -1.0f);
    m_tamara->setPosition(ccp(100,70) );
    m_tamara->setOpacity( 255);//RGBA值RGB+透明度值
	this->addChild(m_tamara);

	m_grossini=CCSprite::spriteWithSpriteFrameName("grossinis_sister1.png");
    m_grossini->setRotation( 120);
    m_grossini->setPosition( ccp(s.width/2, s.height/2));
    m_grossini->setColor( ccc3( 255,0,0));
	this->addChild(m_grossini);

	m_kathia=CCSprite::spriteWithSpriteFrameName("grossinis_sister2.png");
    m_kathia->setPosition( ccp(s.width-100, s.height/2));
    m_kathia->setColor( ccBLUE);
	this->addChild(m_kathia);

	return true;
}
SpriteTestLayer::~SpriteTestLayer(void)
{
}

运行结果:

哈哈! 效果一样,没问题了,以后就用这种方法加载资源图片吧!

如果讲述得有误,或者不对的地方,还望各位指出!

参看资料:

http://www.cocoachina.com/bbs/read.php?tid=103764

http://www.cnblogs.com/andyque/archive/2011/03/18/1988097.html


分享到:
评论

相关推荐

    Cocos2d-x初入学堂-->CCSprite基本处理(2)工程

    Cocos2d-x初入学堂-->CCSprite基本处理(2):创建、缩放、旋转、混色;源码和资源都放在包里了

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    cocos2d-x-2.1.5

    cocos2d-x-2.1.5

    cocos2d-x事件类

    在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。 在下通宵了一个晚上,写出了该事件类。 谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类...

    大富翁手机游戏开发实战基于Cocos2d-x3.2引擎

    资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...

    Cocos2d-x高级开发教程

    Cocos2d-x是移动跨平台开发最流行的游戏引擎,而本书是一本很全面的、比较‘接地气’的游戏开发教程。书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关...

    Cocos2d-x 3.x游戏开发实战pdf含目录

    Cocos2d-x 3.x游戏开发实战pdf含目录,内容详细,强烈推荐给大家。

    cocos2d-x-3.2旧版引擎下载

    cocos2d-x-3.2下载,不多说。或者可以下载另一个资源 cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5) http://download.csdn.net/download/crazymagicdc/9982656

    cocos2d-x实战项目

    cocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML文件读取与骨骼动画.rarcocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML...

    cocos2d-x 动画工具 Flash2Cocos2d-x 1.3

    cocos2d-x 动画工具 Flash2Cocos2d-x 1.3

    Cocos2D-X游戏开发技术精解

    资源名称:Cocos2D-X游戏开发技术精解内容简介:Cocos2D-X是一款支持多平台的 2D手机游戏引擎,支持iOS、Android、BlackBerry等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 《Cocos2D-X...

    经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip

    经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip

    cocos2d-x-3.0 类图

    这是我重新弄的cocos2d-x-3.0的类图.之前别人兄台弄的,有些不全面,有些地方错误.我这个可以说是最新的了.每个类添加了中文的详细注解,同时也添加了中文的类名称翻译.这样对cocos2d-x-3.0的框架比较好上手. 有兴趣的...

    精通COCOS2D-X游戏开发 基础卷_2016.4-P399-13961841.pdf

    精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发

    Cocos2D-X游戏开发技术精解.pdf

    《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...

    Cocos2d-x-3.x游戏开发之旅

    Cocos2d-x-3.x游戏开发之旅-钟迪龙著 全新pdf版和附书代码(代码为工程文件,可复制) 附带目录标签

    cocos2d-x windows vs2010配置

    Cocos2d-x windows vs2010 配置图文详解

    Cocos2d-x实战 JS卷 Cocos2d-JS开发

    Cocos2d-x实战 JS卷 Cocos2d-JS开发 PDF 电子书完整版本

    cocos2d-x 3.0

    cocos2d-x 3.0 人物行走 . 包里有代码和 图片资源.

    cocos2d-x 3.x游戏开发实战光盘

    cocos2d-x 3.x游戏开发实战光盘

Global site tag (gtag.js) - Google Analytics