这个世界每一天都在验证我们的渺小,但我们却在努力创造,不断的在这生活的画卷中留下自己的脚印。或许等到我们老去的那一天,老得不能动仅仅能靠回顾的那一天。你躺在轮椅上,不断的回顾过去。相思的痛苦忘不了,相恋的甜蜜浮如今心头。嘴角不觉一笑,年少时的疯狂,热情。理想和抱负,都随着岁月的流去而化作人生的財富,或多或少,宛如那夕阳西下的余辉,在慢慢消失着不见。。

(不文艺你会死?)

好吧,近期天天在忙着写游戏,天天写,并且效率还不高。光这两天想着怎么优化和控制敌人出现的逻辑和地图数据的存储,就前前后后墨迹了俩天才写完,好吧。要严重反思一下。总结一下怎样提高写代码的效率:写代码的时候不要刷微博。写代码的时候不要开qq,写代码的时候不要上知乎。

恩。就这样子!

=========================================================

以上纯属扯淡。恩,扯淡。

。。

说废话好玩吗?)

我们在玩游戏的常常会遇到loading界面,顾名思义,主要用来加预先载资源文件。先来一张效果图:

恩。有点丑,只是大概就这样子哈,载入完毕后开启游戏界面

事实上这就是一张背景图片 + 一个进度条  + 尾随进度条提示的小框框 + 一个loading文字标签

恩,我们来模拟实现它,首先,我们创建这些资源

	auto winSize = Director::getInstance()->getWinSize();

	//背景图片
auto background = Sprite::create(IMG_LOADINGBG);
background->setPosition(winSize.width / 2, winSize.height / 2);
this->addChild(background,0); //loading文字标签
_loadingLabel = LabelTTF::create("Loading...", "Arial", 25);
_loadingLabel->setPosition(winSize.width / 2, winSize.height / 2 - 50);
this->addChild(_loadingLabel); //ControlSlider进度条
_curProgress = 0;
_progressBar = ControlSlider::create("bar_bg.png","bar.png","bar_thumb.png");
_progressBar->setPosition(winSize.width / 2, winSize.height / 2);
_progressBar->setTouchEnabled(false);
_progressBar->setMinimumValue(0);
_progressBar->setMaximumValue(100);
_progressBar->setValue(0);
this->addChild(_progressBar,1); //进度条上面的提示小框框
_barTip = Sprite::create(IMG_LOADING_BAR_TIP);
_barTip->setPosition(
winSize.width / 2 - _progressBar->getContentSize().width / 2,
winSize.height / 2 + 50);
this->addChild(_barTip,1); //提示小框框文字标签
_barTipLabel = LabelTTF::create("0%", "Arial", 20);
_barTipLabel->setPosition(
_barTip->getContentSize().width / 2,_barTip->getContentSize().height / 2
); _barTip->addChild(_barTipLabel);

然后让它动起来,我们让它运行一百次。哈哈

        //interval,repeat,delay
this->schedule(schedule_selector(LoadingScene::loadingLogic),1.0 / 100 ,100,0.2f);

每次运行动态更新提示框的位置和文字标签的信息,到了第一百次,就开启另外一个界面,恩,就是这么简单。。

void LoadingScene::loadingLogic(float dt){
_curProgress ++;
if(_curProgress > 100){
//begin the game choose scene
Director::getInstance()->replaceScene(TransitionFade::create(0.5f,ChooseScene::createScene()));
return;
}
_progressBar->setValue(_curProgress); int startX = _progressBar->getPositionX() - _progressBar->getContentSize().width / 2 +10 ;
int unitX = _progressBar->getContentSize().width / 100; _barTip->setPositionX(startX + _curProgress * unitX);
char str[10] = {0};
sprintf(str,"%d%",_curProgress); _barTipLabel->setString(str); }

咦,看到这里有没有认为哪里不正确?好吧。被你发现了,说好的资源载入哪里去了?并且资源载入的进度百分比怎么算的呢?

好吧,继续。比方我们有一百张图片资源。。

(为什么不是99张?)

void LoadingScene::onEnter(){
Layer::onEnter();
//载入一次图片资源就回调一次
Director::getInstance()->getTextureCache()->addImageAsync("1.png",this,callfunc_selector(LoadingScene::loadingCallback));
...
...
...
Director::getInstance()->getTextureCache()->addImageAsync("100.png",this,callfunc_selector(LoadingScene::loadingCallback)); }

然后回调函数实现,每次运行动态更新提示框的位置和文字标签的信息,到了第一百次,就开启另外一个界面,恩,还是这么简单。。。

void LoadingScene::loadingCallback(){
_curProgress ++;
if(_curProgress > 100){
//begin the game choose scene
Director::getInstance()->replaceScene(TransitionFade::create(0.5f,ChooseScene::createScene()));
return;
}
_progressBar->setValue(_curProgress); int startX = _progressBar->getPositionX() - _progressBar->getContentSize().width / 2 +10 ;
int unitX = _progressBar->getContentSize().width / 100; _barTip->setPositionX(startX + _curProgress * unitX);
char str[10] = {0};
sprintf(str,"%d%",_curProgress); _barTipLabel->setString(str); }

事实上思路都差点儿相同啦,大概就是依据( 已经载入的图片数 /  总图片资源数)百分比来算出进度条的百分比来滑动,或者干脆把进度条最大值设置成图片资源总数。载入多少就滑动多少。。

==================================

恩。就这样子吧。好困的夜晚。。晚安

cocos2d-x 3.0 Loading界面实现的更多相关文章

  1. cocos2d-x游戏开发(十五)游戏加载动画loading界面

    个人原创,欢迎转载:http://blog.csdn.net/dawn_moon/article/details/11478885 这个资源加载的loading界面demo是在玩客网做逆转三国的时候随 ...

  2. cocos2d-x游戏开发(十五)游戏载入动画loading界面

    这个资源载入的loading界面demo是在玩客网做逆转三国的时候随手写的,尽管我在那仅仅待了2个礼拜.可是也算參与了一个商业游戏项目了,学到不少东西.当时使用的cocos2d-x还是1.0版的,我用 ...

  3. SILVERLIGHT 应急卫生模拟演练项目之loading界面实现

    第一次在博客园写文章 俺是菜鸟 有不足之处还请大佬们多多指教 第一次也不知道该写啥 俺就拿自己最近做的一个项目 来细说吧 俺们公司是做医疗卫生方面的  其中有一块涉及到应急卫生模拟演练方面 这块分到我 ...

  4. 青瓷引擎使用心得——修改引擎的loading界面

    一. 修改引擎的Loading界面之使用进度条显示1. 双击打开引擎包中的lib/qc-loading-debug.js,如下图所示: 2. 只需要修改qici.init函数即可改变loading界面 ...

  5. LuaFramework热更新过程(及可更新的loading界面实现)

          1.名词解释: 资源包:点击 LuaFramework  |  Build XXX(平台名) Resource,框架会自动将自定义指定的资源打包到StreamingAssets文件夹,这个 ...

  6. Cocos Creator—定制H5游戏首页loading界面

    Cocos Creator从1.0版本发布到现在也有一年多了,按理说一些常见的问题网上都有解决方案,例如"如何自定义首页加载进度条界面"这种普遍需求,应该所有人都会遇到的,因此也有 ...

  7. 10分钟,利用canvas画一个小的loading界面

    首先利用定义下canvas得样式 <canvas width="1024" height="720" id="canvas" styl ...

  8. Android4.0设置界面改动总结(三)

    Android4.0设置界面改动总结大概介绍了一下设置改tab风格,事实上原理非常easy,理解两个基本的函数就可以: ①.invalidateHeaders(),调用此函数将又一次调用onBuild ...

  9. 高屋建瓴 cocos2d-x-3.0架构设计 Cocos2d (v.3.0) rendering pipeline roadmap(原文)

    Cocos2d (v.3.0) rendering pipeline roadmap Why (the vision) The way currently Cocos2d does rendering ...

随机推荐

  1. struts2.x + Tiles2.x读取多个xml 配置文件

    在web.xml中配置如下即可: <context-param> <param-name>org.apache.tiles.impl.BasicTilesContainer.D ...

  2. WIN10远程桌面连接--“出现身份验证错误。要求的函数不支持”

    最近WIN10升级补丁后发现远程桌面无法连接了,报“出现身份验证错误.要求的函数不支持”的错误: 解决办法: 第一种,配置本地自己的电脑,开始菜单->搜索gpedit.msc并打开   打开配置 ...

  3. cocos2d-x 显示触摸操作(显示水波点击效果,用于视频演示)

    昨天刚刚參加玩游戏设计大赛, 积累了一些东西. 接下去将会逐个分享出来. 首先是显示触摸操作. 由于要演示我们的作品.使用试玩过程中, 假设没办法显示我们的触摸操作(像录制视频一样, 点击了屏幕某点, ...

  4. windows server,无桌面服务器 , 批处理更改时区

    windows server,无桌面服务器 , 批处理更改时区 time /t cmd.exe /c Control.exe TIMEDATE.CPL,,/Z "China Standard ...

  5. vue17 $watch 监听数据变化

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. IOC DI 专题

    IoC:Inversion of Control,控制反转DI:Dependency Injection,依赖注入 要理解上面两个概念,就必须搞清楚如下的问题: 参与者都有谁?依赖:谁依赖于谁?为什么 ...

  7. gym 100735I

    Description standard input/outputStatements You are given three numbers. Is there a way to replace v ...

  8. JAVA学习书籍

    1 java编程思想(第四版) 2 head first servlet &jsp

  9. OpenSUSE Leap 42.3下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法

    远程虚拟控制台依赖于java运行环境(jre),在通过浏览器打开链接前,系统必须安装jre环境,远程管理控制台其实就是一个java程序,打开相应的网站会下载一个jnlp(java网络加载协议)的文件, ...

  10. 打印机共享为什么老是出现“操作无法完成(错误 0X00000709)。再次检查打印机名称、并确保打印机连接网络

    这个情况应该是访问IP连接打印机才会出现的.解决办法:不使用IP访问,使用网上邻居找计算机名称再连接打印机即可. ------------------------------------------- ...