首页 > 代码库 > 关于Cocos2d-x中打包图集和使用方法
关于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");是直接从缓存中取,效率更高,速度更快。
1 bool Star::init(){2 Sprite::init();3 4 //setTexture("star.png");5 6 //this->initWithSpriteFrameName("star.png");7 initWithSpriteFrameName("star.png");8 9 }
2.在帧动画中使用,SpriteFrameCache::getInstance()是获得这个缓存精灵帧对象(类似一个大图)
1 //创建行走的帧动画 2 Animation * animation = Animation::create(); 3 //animation->addSpriteFrameWithFile("s_1.png"); 4 animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("s_1.png")); 5 //animation->addSpriteFrameWithFile("s_2.png"); 6 animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("s_2.png")); 7 //animation->addSpriteFrameWithFile("s_3.png"); 8 animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("s_3.png")); 9 //animation->addSpriteFrameWithFile("s_4.png");10 animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("s_4.png"));11 //animation->addSpriteFrameWithFile("s_5.png");12 animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("s_5.png"));13 //animation->addSpriteFrameWithFile("s_6.png");14 animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("s_6.png"));15 animation->setDelayPerUnit(0.1f);16 animation->setRestoreOriginalFrame(true);17 //设置动画型的动作18 auto animate = Animate::create(animation);19 //this->runAction(RepeatForever::create(animate));20 myHero->runAction(RepeatForever::create(animate));
3.创建精灵节点的时候使用
1 //创建一颗子弹2 auto bullet = Sprite::createWithSpriteFrameName("bullet1.png");
4.播放动画时使用,setSpriteFrame();感觉和setTextrue();差不多
1 //播放受伤动画 2 SpriteFrame *hurt = nullptr; 3 SpriteFrame *old = nullptr; 4 switch (m_planeType) 5 { 6 case Enemy2: 7 hurt = SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy2_hit.png"); 8 old = SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy2.png"); 9 break;10 case Enemy3:11 hurt = SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy3_hit.png");12 old = SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy3_n1.png");13 break;14 case Enemy4:15 hurt = SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy3_hit.png");16 old = SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy3_n2.png");17 break;18 }19 20 auto setHurtImg = CallFunc::create([this, hurt](){21 this->setSpriteFrame(hurt);22 });23 24 auto setOldImg = CallFunc::create([this, old](){25 this->setSpriteFrame(old);26 });27 28 auto hurtAction = Sequence::create(setHurtImg, DelayTime::create(0.2), setOldImg, nullptr);29 30 this->stopAllActions();31 this->runAction(hurtAction);
5.放进精灵帧数组中
1 Vector<SpriteFrame*> m_blowframes; //存放爆炸纹理精灵帧,.h文件里面定义
1 if (planetype == EnemyPlaneType::Enemy1) 2 {3 m_blowframes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy1_down1.png"));4 m_blowframes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy1_down2.png"));5 m_blowframes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy1_down3.png"));6 m_blowframes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy1_down4.png"));7 }
关于Cocos2d-x中打包图集和使用方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。