Cocos2d-x 3.x使用第三方库播放gif图

效果图:

由于kd的项目中需要用到gif,而Cocos2d-x本身是不支持gif播放的。百度 + google 了很久,最终都指向:https://github.com/opentalking/gif-for-cocos2dx

这里,可惜一开始看到的时候是基于2.2的,由于对底层代码不熟悉,根本没办法下手。于是联系原作者,他一个周末就搞出个3.x的版本,大家可以去膜拜下:
地址:https://github.com/opentalking/gif-for-cocos2dx-3.x.git

在这里真心要为大神的无私分享精神点个赞~

使用方法:

pull下来后,把gif文件夹导入到项目中来,然后就可以像使用Sprite那样使用gif~~~


1

2

3

4

5

6

7

8

9

10

std::string name = "g2.gif";

name = FileUtils::getInstance() -> fullPathForFilename(name.c_str());

GifBase *gif = InstantGif::create(name.c_str());

gif->setPosition(Point(visibleSize.width * 0.5, visibleSize.height * 0.5));

gif -> setScale(2);

this->addChild(gif);

gif2 = CacheGif::create(name.c_str());

gif2->setPosition(Point(500,0));

gif2->setScale(2);

this->addChild(gif2);

用到的类主要是InstantGif 和 CacheGif,两者的使用方法一样,前者是一边播放一边从数据中解析帧,后者是一次性解析完,并放到缓存中,这种方式耗时长,占用内存大(图片帧数太多的话可能会挂),但是相对第一种方式会流畅很多~

Cocos引擎中文官网现面向广大Cocos引擎相关开发者征集优秀教程,欢迎给位童鞋踊跃投稿!来稿请发送至:[email protected]。

来源网址:http://helkyle.tk/2014/12/11/cocos2dxgif/

  1 .cpp完整代码
  2
  3 #include "HelloWorldScene.h"
  4 #include "Gif/GIFMovie.h"
  5 #include "Gif/CacheGif.h"
  6 #include "Gif/InstantGif.h"
  7
  8 USING_NS_CC;
  9
 10 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
 11 #define FILE_FORMAT ("/mnt/sdcard/g%d.gif") //On the Android platform, the resources are compressed in the asset directory. Therefore, the resources must be files on the sd card
 12 #else
 13 #define FILE_FORMAT ("g%d.gif")
 14 #endif
 15
 16 CCScene* HelloWorld::scene()
 17 {
 18     // ‘scene‘ is an autorelease object
 19     CCScene *scene = CCScene::create();
 20
 21     // ‘layer‘ is an autorelease object
 22     HelloWorld *layer = HelloWorld::create();
 23
 24     // add layer as a child to scene
 25     scene->addChild(layer);
 26
 27     // return the scene
 28     return scene;
 29 }
 30
 31 // on "init" you need to initialize your instance
 32 bool HelloWorld::init()
 33 {
 34     //////////////////////////////
 35     // 1. super init first
 36     if ( !CCLayer::init() )
 37     {
 38         return false;
 39     }
 40
 41     CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
 42     CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
 43
 44     /////////////////////////////
 45     // 2. add a menu item with "X" image, which is clicked to quit the program
 46     //    you may modify it.
 47
 48     // add a "close" icon to exit the progress. it‘s an autorelease object
 49     CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
 50         "CloseNormal.png",
 51         "CloseSelected.png",
 52         this,
 53         menu_selector(HelloWorld::menuCloseCallback));
 54
 55     pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,
 56         origin.y + pCloseItem->getContentSize().height/2));
 57
 58     // create menu, it‘s an autorelease object
 59     CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
 60     pMenu->setPosition(CCPointZero);
 61     this->addChild(pMenu, 1);
 62
 63     return true;
 64 }
 65
 66 int count = 1;
 67 void HelloWorld::update(float delta)
 68 {
 69     count++ ;
 70     if(count > 240)
 71     {
 72         this->removeAllChildren();
 73     }
 74 }
 75
 76 void HelloWorld::menuCloseCallback(CCObject* pSender)
 77 {
 78     count++;
 79     while(this->getChildByTag(1000))
 80     {
 81         this->removeChildByTag(1000);
 82     }
 83     CCLOG("%s","------after remove gif-----------");
 84     CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
 85     if(count % 2 != 0)
 86     {
 87         return ;
 88     }
 89     std::string name = CCString::createWithFormat(FILE_FORMAT,count/2)->getCString();
 90     name = CCFileUtils::sharedFileUtils()->fullPathForFilename(name.c_str());
 91
 92     GifBase *gif = InstantGif::create(name.c_str());
 93     if(gif == NULL)
 94     {
 95         CCLOG("%s","create gif failed");
 96         return ;
 97     }
 98     gif->setAnchorPoint(ccp(0,0));
 99     this->addChild(gif);
100     gif->setPosition(ccp(0,0));
101     gif->setTag(1000);
102
103
104     gif = CacheGif::create(name.c_str());
105     gif->setAnchorPoint(ccp(0,0));
106     this->addChild(gif);
107     gif->setPosition(ccp(500,0));
108     gif->setScale(2);
109     gif->setTag(1000);
110     CCLOG("%s","------after add gif-----------");
111     CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
112
113     return ;
114 }

在class类中还有Gif文件夹,里面有需要的类

时间: 2024-08-06 06:51:15

Cocos2d-x 3.x使用第三方库播放gif图的相关文章

cocos2dx 3.x使用第三方库播放gif

效果图: 由于kd 的项目中需要用到gif,而cocos2dx 本身是不支持gif播放的.百度 + google 了很久,最终都指向 https://github.com/opentalking/gif-for-cocos2dx这里,可惜一开始看到的时候是基于2.2的,由于对底层代码不熟悉,根本没办法下手...于是联系原作者,他一个周末就搞出个3.x的版本,大家可以去膜拜下https://github.com/opentalking/gif-for-cocos2dx-3.x.git 在这里真心要

Python 标准库、第三方库

Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具.这些库可用于文件读写.网络抓取和解析.数据连接.数清洗转换.数据计算和统计分析.图像和视频处理.音频处理.数据挖掘/机器学习/深度学习.数据可视化.交互学习和集成开发以及其他Python协同数据工作工具. 为了区分不同对象的来源和类型,本节将在描述中通过以下方法进行标识: [Python内置函数]:Python自带的内置函数.函数无需导入,直接使用.

最全面的iOS和Mac开源项目和第三方库汇总

UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看“使用方法”. (国人写) XHRefreshControl – XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更多的组件.(国人写) CBStoreHou

iOS 开发第三方库全集

拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看"使用方法". (国人写) XHRefreshControl – XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更多的组件.(国人写) CBStoreHo

IOS常用第三方库《转》

UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch VPN 完整项目 好的文章 Xcode插件 美工资源 其他资源 开发资源 UI 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableView或者Collect

iOS 第三方库、插件、知名博客总结

用到的组件1.通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好化时间 MBProgressHUD一款提示框第三方库 MWPhotoBrowser一款简单的 iOS 照片浏览控件 CTAssetsPickerController一个选择器组件, 支持从用户的相片库选择多张照片和视频. QB

iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView

下载链接:github不断更新地址:https://github.com/gsdios/SDCycleScrollView 使用原理:采用UICollectionView的重用机制和循环滚动的方式实现图片的无限轮播,播放非常顺畅,解决了UISCrollView使用时从最后一张跳到第一张时的生硬状态. 主要类截图: SDCollectionViewCell:用来重用的item,即显示图片的视图: SDCycleScrollView: 对外提供的一个创建轮播器的接口类,使用者就是直接使用这个类来实现

iOS中一些 常用的第三方库

转自ibireme的博客 做iOS开发总会接触到一些第三方库,这里整理一下,做一些吐槽. 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下Github里面流行的iOS库. 首先整理了一份Github上排名靠前的iOS库(大概600个repos) 除了逛一下每日/每月流行之外,也可以到这里来看一下整个iOS Repos的排名. 下面是一些比较流行的第三方库: HTTP 相比较之下

cocos2d-x 3.0 引用第三方库 及编译成apk时android mk文件写法

cocos2d-x 3.0 中,如果你需要使用CocosStudio.Extensions扩展库 等等,都需要自己手动添加. 添加步骤如下:(比如说现在我要添加libExtensions,libCocosStudio , libGUI) 1.添加附加项目 右击解决方案--->添加现有项目--->添加:项目目录\cocos2d\extensions\proj.win32\libExtensions,然后你会发现左边多了一个libExtensions扩展库 右击解决方案--->添加现有项目-