zoukankan      html  css  js  c++  java
  • 关于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");是直接从缓存中取,效率更高,速度更快。初始化的时候才能用这个。

     bool Star::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)
    {
         case Enemy2:
           hurt = SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy2_hit.png");
           old = SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy2.png");
           break;
         case Enemy3:
           hurt = SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy3_hit.png");
           old = SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy3_n1.png");
           break;
         case Enemy4:
           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<SpriteFrame*> 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"));
    }
  • 相关阅读:
    php中__construct()和__initialize()的区别
    js的栈内存和堆内存
    CC攻击原理及防范方法
    html页面调用js文件里的函数报错onclick is not defined处理方法
    yii2深入理解之内核解析
    Scala Data Structure
    Scala Basis
    【MySql】牛客SQL刷题(下)
    【Flume】知识点整理
    【kafka】生产者API
  • 原文地址:https://www.cnblogs.com/HangZhe/p/5814012.html
Copyright © 2011-2022 走看看