图集打包算法_关于Cocos2d-x中打包图集和使用方法

准备的过程

1.打开TextruePacker软件

2.把游戏中要使用的图片拖到TextruePacker里面,TextruePacker会自动帮我们排序,让所有小图变成一个大图

3.点击Publish-会输出两个文件

MyTexture.plist  //里面记录了所有小图在大图中的位置和属性,cocos可以根据这些信息在MyTexture.png大图中找到所需要的小图

MyTexture.png  //一张容纳了所有小图的大图

4.在GameScene.cpp的init方法里面写

//加载plist文件到一个精灵帧缓存中

SpriteFrameCache::getInstance()->addSpriteFramesWithFile("MyTexture.plist");

开始使用

1.在对象类的init方法中使用,根据小图的名字在精灵帧缓存的大图中找到小图并且赋予Star对象纹理图案,这个和setTexture("star.png");是一样的效果,但是setTexture("star.png");每次都要去原文件里面找,而initWithSpriteFrameName("star.png");是直接从缓存中取,效率更高,速度更快。初始化的时候才能用这个。

boolStar::init(){

Sprite::init();//setTexture("star.png");

initWithSpriteFrameName("star.png");

}

2.创建精灵节点的时候使用

//创建一颗子弹

auto bullet = Sprite::createWithSpriteFrameName("bullet1.png");

3.设置精灵节点的时候使用(最常用)

myBedHero->setSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("h_1.png"));

4.在帧动画中使用,SpriteFrameCache::getInstance()是获得这个缓存精灵帧对象(类似一个大图)

//创建行走的帧动画

Animation * animation =Animation::create();//animation->addSpriteFrameWithFile("s_1.png");

animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("s_1.png"));//animation->addSpriteFrameWithFile("s_2.png");

animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("s_2.png"));//animation->addSpriteFrameWithFile("s_3.png");

animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("s_3.png"));//animation->addSpriteFrameWithFile("s_4.png");

animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("s_4.png"));//animation->addSpriteFrameWithFile("s_5.png");

animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("s_5.png"));//animation->addSpriteFrameWithFile("s_6.png");

animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("s_6.png"));

animation->setDelayPerUnit(0.1f);

animation->setRestoreOriginalFrame(true);//设置动画型的动作

auto animate =Animate::create(animation);

myHero->runAction(RepeatForever::create(animate));

5.播放动画时使用,setSpriteFrame();感觉和setTextrue();差不多

//播放受伤动画

SpriteFrame *hurt =nullptr;

SpriteFrame*old =nullptr;switch(m_planeType)

{caseEnemy2:

hurt= SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy2_hit.png");

old= SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy2.png");break;caseEnemy3:

hurt= SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy3_hit.png");

old= SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy3_n1.png");break;caseEnemy4:

hurt= SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy3_hit.png");

old= SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy3_n2.png");break;

}

auto setHurtImg= CallFunc::create([this, hurt](){this->setSpriteFrame(hurt);

});

auto setOldImg= CallFunc::create([this, old](){this->setSpriteFrame(old);

});

auto hurtAction= Sequence::create(setHurtImg, DelayTime::create(0.2), setOldImg, nullptr);this->stopAllActions();this->runAction(hurtAction);

6.放进精灵帧数组中

Vector m_blowframes; //存放爆炸纹理精灵帧,.h文件里面定义

if (planetype ==EnemyPlaneType::Enemy1)

{

m_blowframes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy1_down1.png"));

m_blowframes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy1_down2.png"));

m_blowframes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy1_down3.png"));

m_blowframes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy1_down4.png"));

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值