cocos2dx3.2格斗类游戏加载界面

先看效果图:

cocos2dx使用版本:cocos2dx3.2   IDE:使用VS2013

下载游戏引擎自不用说了。

使用命令行创建项目。

cocos new GeDou -p com.zhenqi.game -l cpp -d F:\cocos2d-xProject

而后使用vs2013打开,并创建一个加载层。

LoadingScene.h 内容如下:
#ifndef __LOADING_SCENE_H__
#define __LOADING_SCENE_H__
#include "ui/CocosGUI.h"
#include "cocos2d.h"
USING_NS_CC;
class Loading : public Layer
{
public:
static Scene* createScene();
virtual bool init();
//设置进度条
void SetPro(float fRate);
//资源预加载
void LoadRec();
//资源预加载回调函数
void OnLoadArmatureData(float percent);
//资源加载回调
void OnLoadRecCallBack(Object *pObj);
    CREATE_FUNC(Loading);
protected:
intm_nLoadRecNum;//资源加载数
intm_nLoadRecTotalNum;//资源加载总数
ui::LoadingBar* pProLoadRec;    //进度条
};
#endif // __LOADING_SCENE_H__

LoadingScene.cpp 实现类如下:

#include "LoadingScene.h"
#include "ChooseHero.h"
#include "ui/CocosGUI.h"
#include "cocostudio/CocoStudio.h"
using namespace cocostudio;
Scene* Loading::createScene()
{
    // ‘scene‘ is an autorelease object
    auto scene = Scene::create();
    
    // ‘layer‘ is an autorelease object
    auto layer = Loading::create();
    // add layer as a child to scene
    scene->addChild(layer);
    // return the scene
    return scene;
}
bool Loading::init()
{
    if ( !Layer::init() )
    {
        return false;
    }
    
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();
Size size = Director::getInstance()->getWinSize();
/************************************************************************/
/*背景图片                                                */
/************************************************************************/
//人物图片
auto pPersonBg = Sprite::create("ui/loading_bg.png");
pPersonBg->setPosition(ccp(size.width*0.5f, size.height*0.5f));
addChild(pPersonBg, 100);
//创建logo图
auto pLogo = Sprite::create("ui/logo_bg.png");
pLogo->setScale(0.95f);
pLogo->setPosition(ccp(size.width*0.5f, 410));
addChild(pLogo, 100);
/************************************************************************/
/*进度条                                                  */
/************************************************************************/
//创建加载进度条背景
auto pProBg = Sprite::create("ui/loading_progress_bg.png");
pProBg->setPosition(ccp(size.width*0.5f, 100));
addChild(pProBg, 100000);
pProLoadRec = ui::LoadingBar::create("ui/loading_progress_bar.png");
pProLoadRec->setPosition(pProBg->getPosition());
pProLoadRec->setDirection(ui::LoadingBar::Direction::LEFT);
pProLoadRec->setPercent(0);
addChild(pProLoadRec, 100001, 1);//同时设置Tag值为1
auto pLight = Sprite::create("ui/loading_progress_light.png");
addChild(pLight, 300000, 2);
pLight->setPosition(ccp(pProLoadRec->getPositionX() - pProLoadRec->getContentSize().width*0.5f, pProLoadRec->getPositionY()));
m_nLoadRecNum = 0;
m_nLoadRecTotalNum = 16;
//预加载本层资源
LoadRec();
    
    return true;
}
void Loading::SetPro(float fRate)
{
do
{
pProLoadRec->setPercent(fRate * 100);
//同步光点
auto pLight = dynamic_cast<Sprite *>(getChildByTag(2));
if (pLight != NULL)
pLight->setPositionX(pProLoadRec->getPositionX() + pProLoadRec->getContentSize().width*(fRate - 0.5f));
//若加载完成
if (fRate >= 1)
{
auto pDicLang = Dictionary::createWithContentsOfFile("ui_xml/loading_xml.xml");
//得到加载信息label
auto pStrLoading = dynamic_cast<String*>(pDicLang->objectForKey("loading_end"));
auto pLabelLoading = dynamic_cast<LabelTTF *>(getChildByTag(3));
//pLabelLoading->setString(pStrLoading->getCString());
}
return;
} while (false);
//CCLog("Fun CNFLoadingLayer::SetPro Error!");
}
//资源预加载
void Loading::LoadRec()
{
TextureCache::getInstance()->addImageAsync("ui/serverselect_bg.png", CC_CALLBACK_1(Loading::OnLoadRecCallBack,this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/kulougongshou.ExportJson",this,schedule_selector(Loading::OnLoadArmatureData,this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/kulouzhanshi.ExportJson", this, schedule_selector(Loading::OnLoadArmatureData, this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/mayi.ExportJson", this, schedule_selector(Loading::OnLoadArmatureData, this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/bianyikunchong.ExportJson", this, schedule_selector(Loading::OnLoadArmatureData, this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/bubing.ExportJson", this, schedule_selector(Loading::OnLoadArmatureData, this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/xiaoyin.ExportJson", this, schedule_selector(Loading::OnLoadArmatureData, this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/NewProject.ExportJson", this, schedule_selector(Loading::OnLoadArmatureData, this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/minren1.ExportJson", this, schedule_selector(Loading::OnLoadArmatureData, this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/kulou_arrow.ExportJson", this, schedule_selector(Loading::OnLoadArmatureData, this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/naili.ExportJson", this, schedule_selector(Loading::OnLoadArmatureData, this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/NPC_kakaxi.ExportJson", this, schedule_selector(Loading::OnLoadArmatureData, this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/portal.ExportJson", this, schedule_selector(Loading::OnLoadArmatureData, this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/hited_light.ExportJson", this, schedule_selector(Loading::OnLoadArmatureData, this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/public_casting.ExportJson", this, schedule_selector(Loading::OnLoadArmatureData, this));
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync("armature/skill_light_1.ExportJson", this, schedule_selector(Loading::OnLoadArmatureData, this));
}
void Loading::OnLoadArmatureData(float percent){
m_nLoadRecNum++;
SetPro((float)m_nLoadRecNum / (float)m_nLoadRecTotalNum);
if (m_nLoadRecNum == m_nLoadRecTotalNum){
//延迟1秒
//Director::getInstance()->replaceScene(ChooseHero::createScene());

}
if (percent >= 1)
{
//CCLog("addArmatureFileInfoAsync over");
}
}
void Loading::OnLoadRecCallBack(Object *pObj){
do
{
m_nLoadRecNum++;
SetPro((float)m_nLoadRecNum / (float)m_nLoadRecTotalNum);
if (m_nLoadRecNum == m_nLoadRecTotalNum){
//延迟1秒
//Director::getInstance()->replaceScene(ChooseHero::createScene());

}
return;
} while (false);
//CCLog("Fun CNFLoginScene::OnLoadRecCallBack Error!");
}
时间: 2024-11-05 11:28:16

cocos2dx3.2格斗类游戏加载界面的相关文章

Cocos2d-x3.2 TextureCache类异步加载功能讲解

本文TextureCache类异步加载功能的代码抽出,总共代码就200多行,感兴趣可以看看. 研究这个主要是因为项目中需要异步插入数据,但之前的方法在Android上总是崩溃所以想到TextureCache有异步加载的功能就将其抽出了. 原文地址:http://blog.csdn.net/qqmcy/article/details/39890837 首先,创建AsyncTaskTime类,主要模拟一个费时的方法 AsyncTaskTime.h #include "cocos2d.h"

jvm系列(一):java类的加载机制

java类的加载机制 原文:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个

类的加载和反射

一.类的加载 类的加载一共分为三步: 1.加载 就是将类加载进内存,并同时创建一个Class对象(就是描述一个 .class 文件的对象) 而且任何类被使用前都会先创建一个 Class对象 2.连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号引用替换为直接引用 3.初始化 见前面的初始化笔记. 初始化的时机: 创建类的实例 访问类的静态变量,或者为静态变量赋值 调用类的静态方法 使用反射方式来强制创建某个类

&lt;&lt;黑马程序员&gt;&gt;类的加载和初始化

类的加载和初始化 + (void)load  方法   ①  当程序一启动就会把所有类和分类而且加载后就会调用每个类的+load方法只会调用一次.   ②  先加载父类在加载子类,每个类加载完就会调用load方法 2 . + (void)initialize    方法      ①  当第一次使用这个类时就会调用  + (void)initialize    方法 调用顺序:①  先加载父类在加载子类               ② 先调用父类的load方法在调用子类的load方法      

黑马程序员----类的加载和初始化

类的加载和初始化 当程序一启动,就会加载项目中所有的类和分类,而且加载后会调用每一个类和分类中的+load方法(即使不创建对象也会调用),且只会调用一次: 当第一次使用某个类时,就会调用当前类的+initialize方法: 先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法): 先初始化父类,再初始子类(先调用父类的+initialize方法,再调用子类的+initialize方法): 注意点:1.调用创建子类时即会调用父类的+initialize方法,也会调用子类的

【转】Android类动态加载技术

http://www.blogjava.net/zh-weir/archive/2011/10/29/362294.html Android应用开发在一般情况下,常规的开发方式和代码架构就能满足我们的普通需求.但是有些特殊问题,常常引发我们进一步的沉思.我们从沉思中产生顿悟,从而产生新的技术形式. 如何开发一个可以自定义控件的Android应用?就像eclipse一样,可以动态加载插件:如何让Android应用执行服务器上的不可预知的代码?如何对Android应用加密,而只在执行时自解密,从而防

【Java基础】Java类的加载和对象创建流程的详细分析

相信我们在面试Java的时候总会有一些公司要做笔试题目的,而Java类的加载和对象创建流程的知识点也是常见的题目之一.接下来通过实例详细的分析一下. 实例问题 实例代码 Parent类 1 package mytest.javaBase; 2 3 public class Parent { 4 int a = 10; 5 static int b = 11; 6 // 静态代码块 7 static { 8 System.out.println("Parent静态代码块:b=" + b)

类的加载器 ClassLoader

先说明类的加载过程: 当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过如下三个步骤来对该类进行初始化: 而关于ClassLoader: 类加载器是用来把类(class)装载进内存的.JVM 规范定义了两种类型的类加载器:启动类加载器(bootstrap)和用户自定义加载器(user-defined class loader). JVM在运行时会产生3个类加载器组成的初始化加载器层次结构 ,如下图所示: 举例如下: public class TestClassLoader { pu

类的加载次序与继承

原创转载请注明出处:http://www.cnblogs.com/chaeyeon/p/6146169.html 如果:A extends B1.若要加载类A,应先加载父类B.而只要加载一个类,静态字段就会分配内存,静态代码块就会执行.则先为父类B(Object)的静态变量分配内存以及执行父类的静态语句块(执行先后顺序按由书写执行决定). 2.然后再加载子类A,及为类A的静态变量分配内存以及执行类A的静态语句块.(并且1.2步骤只会在类第一次加载的时候执行,即最多执行一次) 结论一:子类的加载,