首先 如果游戏 大的情况 下 没有加载可能会出现 游戏很卡的情况 那么 怎么 做加载页面
首先要想好 第一步 这个加载类作为加载 那指定不能 只加在一个场景 所以 需要 在 h里生命 一个 类 的枚举 这样就可以 通过 switch 来判断 去加载 那个页面 和 进行 相应的跳转了
首先需要做加载页面的 背景 方法
auto Mysprite=Sprite::create(""");
Mysprie->setPosition(…);
this->addChild(Mysprite,-1);
然后加载进图条 的背景
auto sprite2 = Sprite::create(“pic/armour_barBg.png”);
this->addChild(sprite2, 1);
sprite2->setPosition(Vec2(visible.width / 2, visible.height / 2));
auto sprite3 = Sprite::create("pic/armour_barCover.png");
this->addChild(sprite3, 3);
sprite3->setPosition(Vec2(visible.width / 2, visible.height / 2));
那就是 看一下这了的 图层 室友顺序的 最底下的 是 缓存的背景 然后是是 条最后是 缓存长度 条
这个是缓存条的 上面的进度文字 也是先设置默认的 然后一会通过缓存的时候来更新 每一帧 都是不一样的 第三个参数也是剧中
auto leday = Label::createWithBMFont(“D:/Cocos/cocos2d-x-3.17.1/tests/cpp-tests/Resources/fonts/bitmapFontTest.fnt”, “Login: 0”,TextHAlignment::CENTER);
this->addChild(leday, 2);
leday->setPosition(Vec2(sprite1->getContentSize().width / 2, sprite1- >getContentSize().height / 2+80));
leday->setColor(Color3B::RED);设置颜色
leday->setBMFontSize(24);
leday->setName("m_leday1");
//这个是进度条的最关心啊的地方
首先生命 图片
auto sprite4 = Sprite::create(“pic/armour_bar.png”);
auto pt = ProgressTimer::create(sprite4); //生命这是一个进度条
pt->setMidpoint(Vec2(0, 0)); // 设置方向的从0.0点开始i
pt->setType(ProgressTimer::Type::BAR);//设置进条类型园的还是 长的
pt->setBarChangeRate(Vec2(1, 0));这个我有点不懂了
pt->setPercentage(0);设置 初始值
pt->setPosition(Vec2(visible.width / 2, visible.height / 2))设置坐标;
pt->setName(“m_sprite4”);设置名字
this->addChild(pt, 2);添加
然后用switch 来判断 来缓存那个类的 文件
到最后调用这个函数的时候也会是通过 改变 枚举 来实现 不同的跳转的
那怎么加载 呢 异步加载下面演示
void Longing::m_LobbyInit()
{
count = 0;
countMax = 100;
for (int i = 0; i < countMax; i++)
{//这个就是 异步加载的函数 夹杂这个东西 并且有回调 函数
//回调函数 都做了什么呢 看下面吧
TextureCache::getInstance()->addImageAsync("start (01).png", CC_CALLBACK_1(Longing::backCallback, this));
}
}
看做了什么事情
void Longing::backCallback(Ref* pSender)
{
//通过 一个成员 变量来计数 已经加载了多少
count++;、
获取 进度条的 精灵 ,名字
这需要一个 强行转换才能找到这个函数
auto pt = (ProgressTimer*)this->getChildByName(“m_sprite4”);
这个 是设置 100是最大值
int pint = (int)count * 100 / countMax;
创建一个 buf
char met[32];
sprintf(met, “Login: %d%%”,pint);
转换成char字符
这个是获取 输出 文字的 名字来改变 输出的数字
Label * leday = (Label*)this->getChildByName(“m_leday1”);
这个是更改字
leday->setString(met);
这个是 更改进图条的长度
pt->setPercentage(pint);
这个是完成跳转的页面
if (count == countMax)
{
switch (temp)
{
case Longing::Skip::lobby:
pa = Planes::create();
break;
case Longing::Skip::game:
pa = Game::create();
break;
case Longing::Skip::shop:
break;
default:
break;
}
auto aaaaaa = Player2::create();
Director::getInstance()->replaceScene(pa);
这个是跳转恩没问题吧
}
return;
}
下面 我写飞机以及敌人和子弹的问题