zoukankan      html  css  js  c++  java
  • Cocos2dx 学习笔记整理----在项目中使用图片(二)

    之前了解了一种比较简单的图片的使用方式,

    今次来了解稍微复杂一点的图片使用方式,plist+png。

    这里要用到之前提到的Texture Packer。

    Texture Packer是一款图片打包工具,Texture Packer可以将素材打包成我们项目需要的格式。

    Cocos2dx支持很多种格式, 我们可以将某一种类的或者有共性的图片打包到一个png,然后用plist管理,以节约加载和内存,且显卡支持的纹理尺寸的长宽为2的n次幂,Texture Packer会把纹理整合到次尺寸。

    今次我们利用plist和png来创建一个动画。

    以下是我搜集到的一个系列素材:

    在Texture Packer中点击add folder,定位到此文件夹;

    在左边的output栏目:选择dataformat为cocos2d;

    如下:

    然后点击工具栏里面的publish级完成导出,导出的成功如下:

    回到我们之前的代码中,加入以下代码:

    //使用plist作为动画
    CCTexture2D::PVRImagesHavePremultipliedAlpha(true);
    CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("feiyunan.plist");
    CCSprite * player = CCSprite::create("feiyunan.png");
    this->addChild(player);

    这样,我们就可以在程序中看到这个图片了。

    但是,这个素材是一个系列的动画帧来的,我们看到的却只有一个不动所有帧都显示在上面的的图片。

    用文本编辑器打开plist文件,可以看到里面保存了每帧动画的所有资料。

    然后这里附带学习了一下动画的播放方式。

    CCArray* animFrames = CCArray::createWithCapacity(15);//有多少帧
    char str[100] = {0};
    for(int i=0; i<24; i++)
    {
    	sprintf(str,"feiyu%d.png",i);
    	CCSpriteFrame* frame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(str);
    	if( frame != NULL )
    		animFrames->addObject( frame );
    }
    CCAnimation *animation = CCAnimation::createWithSpriteFrames( animFrames,0.1f );
    animation->setLoops(-1);
    player->runAction(CCAnimate::create(animation));
    player->setPosition(ccp(200,200));

      

    以上内容皆可在api中查到,然后重新运行,可以看到角色在跑动了。

    如下:

  • 相关阅读:
    集成学习
    逻辑斯谛回归
    【腾讯】【实习】【笔试】【数据分析师】2018.04.05
    C语言中scanf和printf的用法详解
    寻找一个数组中未出现的最小正整数(数组元素可重复)
    吃鸡问题中的的动态规划
    Coursera 深度学习 吴恩达 deep learning.ai 第三课 结构化机器学习项目 第二周 测试题目 Autonomous driving (case study)
    【转】P问题与NP问题详细解答加举例
    LeetCode 149. Max Points on a Line
    LeetCode 150. Evaluate Reverse Polish Notation
  • 原文地址:https://www.cnblogs.com/adoontheway/p/3779482.html
Copyright © 2011-2022 走看看