Cocos2d-x3.2 Loading场景的设计

//GameScene.h

#include "cocos2d.h"

USING_NS_CC;

class GameScene : public cocos2d::Layer
{
public:
    static Scene* createScene();
    
    virtual bool init();
    
    void menuCallback(Ref* pSender);
    
    void loadingCallBack(Ref* pSender);
    
    void turnToHelloScene();
    
private:
    Size size;
    Label *labelLoading;      //Loading字样
    Label *labelPercent;      //进度条数字
    
    int numberOfSprites;    //需要加载的资源数目
    int numberOfLoadSprites;    //已经加载完的资源数目
    
    ProgressTimer *loadProgress;      //进度条
    
    CREATE_FUNC(GameScene);
};
//GameScene.cpp

#include "GameScene.h"
#include "HelloWorldScene.h"

USING_NS_CC;

cocos2d::Scene* GameScene::createScene()
{
    auto scene = Scene::create();   //创建一个场景
    auto layer = GameScene::create();   //创建一个图层
    scene->addChild(layer);
    return scene;
}

//初始化当前的图层
bool GameScene::init()
{
    if(!Layer::init())      //初始化父类
        return false;
    
    //获取屏幕大小
    size = Director::getInstance()->getVisibleSize();
    //size = Director::getInstance()->getWinSize();
    
    labelLoading = Label::createWithSystemFont("Loading...", "Marker Felt", 50);
    labelLoading->setPosition(Vec2(size.width/2, size.height/2));
    this->addChild(labelLoading);
    
    labelPercent = Label::createWithSystemFont("%0", "Marker Felt", 50);
    labelPercent->setPosition(Vec2(size.width/2, size.height*0.3));
    this->addChild(labelPercent);
    
    numberOfSprites = 200;
    numberOfLoadSprites = 0;
    
    //创建一个进度条
    loadProgress = ProgressTimer::create(Sprite::create("sliderProgress.png"));
    loadProgress->setBarChangeRate(Vec2(1, 0));     //横向移动
    loadProgress->setType(ProgressTimer::Type::BAR);
    loadProgress->setMidpoint(Vec2(0, 0));
    loadProgress->setPosition(Vec2(size.width/2, size.height*0.2));
    loadProgress->setPercentage(0.0f);
    this->addChild(loadProgress, 1);
    
    //加载资源,由于图片过少,进度条速度过快,这里让其加载图片多一些,总共200张
    for (int i=0; i<100; i++)
    {
        Director::getInstance()->getTextureCache()->addImageAsync("OnePiece_1.png", CC_CALLBACK_1(GameScene::loadingCallBack, this));
        Director::getInstance()->getTextureCache()->addImageAsync("Flag_1.png", CC_CALLBACK_1(GameScene::loadingCallBack, this));
    }
    
    return true;
}

void GameScene::loadingCallBack(Ref* pSender)
{
    numberOfLoadSprites++;
    
    char tmp[10];
    float value = ((float)numberOfLoadSprites / numberOfSprites)*100;   //已加载的百分比
    sprintf(tmp, "%d%%", (int)(value));
    labelPercent->setString(tmp);
    
    loadProgress->setPercentage(value);
    
    //加载完成,切换场景
    if (numberOfLoadSprites == numberOfSprites) {
        turnToHelloScene();
    }
}

void GameScene::turnToHelloScene()
{
    //读完进度条后跳转到HelloWorld场景
    Director::getInstance()->replaceScene(HelloWorld::createScene());
}

Cocos2d-x3.2 Loading场景的设计

时间: 2024-12-07 18:44:17

Cocos2d-x3.2 Loading场景的设计的相关文章

【转】Unity3d中制作Loading场景进度条所遇到的问题 LoadLevelAsync,AsyncOperation

背景 通常游戏的主场景包含的资源较多,这会导致加载场景的时间较长.为了避免这个问题,可以首先加载Loading场景,然后再通过Loading场景来加载主场景.因为Loading场景包含的资源较少,所以加载速度快.在加载主场景的时候一般会在Loading界面中显示一个进度条来告知玩家当前加载的进度.在Unity中可以通过调用Application.LoadLevelAsync函数来异步加载游戏场景,通过查询AsyncOperation.progress的值来得到场景加载的进度. 尝试--遇到问题

kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)

问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状态信息是如何保存的? 4.partitions设计的目的的根本原因是什么? 一.入门 1.简介 Kafka is a distributed,partitioned,replicated commit logservice.它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现.k

构建之法——典型用户和场景+软件设计与实现+用户体验

第十章(典型用户和场景)(男神女神配社区交友网) 姓名:葱头 性别:男 出生年月:19940404 年龄:21 血型:AB 职业:在校学生 用户偏好:喜欢广交好友 动机,目的,困难:想脱单,因为一直单身,所以渴望寻求真爱,人生的另一半:困难:担心遇不到真爱: 典型场景:在社交网站,能够在大量的人中,巧遇真爱: 典型描述:注册的人越多,需找到真爱的机遇越大. 姓名:Sybin教师 性别:男 出生年月:19850707 年龄:30 血型:AB 职业:在校任职教师 用户偏好:喜欢交友,乐忠于计算机应用

场景营销设计中,不可忽视的环境暗示

在场景设计中,尤其是相对封闭的环境下,要充分利用心理暗示,在一些细节设计上把握用户的从众心理,往往能收到意想之外的收获. 破窗理论:没修复的破窗,导致更多的窗户被打破 破窗效应是犯罪学的一个理论,该理论由詹姆士·威尔逊(James Q. Wilson)及乔治·凯林(George L. Kelling)观察总结得出:指的是环境可以对一个人产生强烈的暗示性和诱导性. 破窗理论:如果有人打坏了一栋建筑上的一块玻璃,又没有及时修复,别人就可能受到某些暗示性的纵容,去打碎更多的玻璃. 人的行为会被环境影响

【转】场景法设计测试用例

转自:http://blog.sina.com.cn/s/blog_4aa1f1570100acvb.html (一)场景法原理 现在的软件几乎都是用事件触发来控制流程的.象GUI软件.游戏等.事件触发时的情景并形成了场景,而同一事件不同的触发顺序和处理结果就形成了事件流.这种在软件设计方面的思想可以引入到软件测试中,可以生动地 描绘出事件触发时的情景,有利于设计测试用例,同时使测试用例更容易理解和执行. 在测试一个软件的时候,在场景法中,测试流程是软件功能按照正确的事件流实现的一条正确流程,那

中间件 | kafka简介、使用场景、设计原理、主要配置及集群搭建

开源Java学习 公众号 一.入门 1.简介 Kafka is a distributed,partitioned,replicated commit logservice.它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现.kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker.无论是kafka集群,还是producer和c

重试与延迟调度系统(一)-场景与设计

首先,来说一下业务场景,也即什么时候,需要有这个一个系统,举两个例子: 1. 订单推送--点评侧垂直业务产生新的订单之后,需要推送给美团订单中心,以在美团APP展示出来.这种通过RPC调用的推送,是可能调用失败的,那么失败之后怎么处理呢?业务线程自己立即重试还是睡一会再重试都不是很合理.在推送失败后,新建个task丢给重试中心统一处理无疑更加优雅. 2. 延迟任务--一个常见的场景就是用户下单一段时间之后,出发XX操作.这种情况下,之前团队经常使用的方式就是新写一个job,轮询扫描表,然后执行X

loadrunner中面向目标场景的设计

在一个面向目标的方案中,可以定义五种类型的目标:虚拟用户数.每秒点击次数(仅 Web Vuser).每秒事务数.每分钟页面数(仅 Web Vuser)或方案的事务响应时间.使用“编辑方案目标”对话框可以对方案目标进行定义.就是设置一个运行目标,在Controller中运行相关负载,如果测试的结果达到目标,则说明系统的性能符合测试目标,否则就提示无法到达目标.目标场景是定性型的性能测试,我们只关心最后性能测试的结论是否符合性能需求,常常用在验收测试的场合. 1.下拉选择运行方式: 2.设置方式 3

产品设计中,场景很重要

今天笔者想简单的和你们聊聊产品设计中的场景问题.首先抛出一个问题,产品设计时是否需要考虑到用户的使用场景? 首先,假设我们需要考虑到用户的使用场景,那么我们再抛出另一个问题:为什么要考虑到用户的使用场景? 让我们换个角度想想这个问题,我们现在使用的最多的电子产品是什么?是手机.无论我们是在挤公交,还是走路,吃饭,甚至是上厕所,无时无刻,我们都在使用手机,那么问题又来了:我们在使用手机的什么?收发信息?接听电话?不,是聊天上网玩游戏,这些无非都要使用到APP.而APP的使用是有多场景化的,不像传统