Cocos2d-x开发FlappyBird02-LoadingScene启动场景和文件预加载

从这一节开始要真正进入节奏了。首先非常感谢泰课在线的老师NetFly童鞋,我这篇就是学习他的教程后写的开发日志。

一、首先来看上节创建的FlappyBird项目的一些内容:


1、Classes文件下是我们整个游戏代码的所放处

2、cocos2d文件下是Cocos2d-x引擎的核心库和功能

3、之后的是对于各平台的解决方案

4、Resources,这个是存放着一些源文件。这里我们把自动创建的给删除掉,换上FlappyBird的资源文件,里面有字体、图片、音频等

5、因为我们是在Windows平台下开发,所以我们打开文件夹proj.win32,双击FlappyBird.sln进入该解决方案。


二、创建项目

1、右键解决方案,选择“在文件资源管理器中打开文件”,打开Classes,删除HelloWorldScene的两个文件,创建LoadingScene.h和LoadingScene.cpp;然后右键FlappyBird项目中的src文件,添加->现有项,把上面两个文件添加到项目中;

2、打开LoadingScene.h,添加如下代码:

#pragma once //添加一个宏,防止重复编译
#include "cocos2d.h" //添加一个核心引擎库


//创建一个类LoadingScene,继承自Scene
class LoadingScene : public cocos2d::Scene
{
public:
virtual bool init();//添加一个虚函数,一个初始化的方法
CREATE_FUNC(LoadingScene);//添加一个cocos特有的方法

private:
void loadingCallBack(cocos2d::Texture2D *texture);//加载回调函数
};

3、打开APPDelegate.cpp,删除#include "HelloWorldScene.h",添加#include "LoadingScene.h"//这里记得添加进来。

然后在bool AppDelegate::applicationDidFinishLaunching()方法中的if(!glview)内添加设置屏幕尺寸的语句:glview->setFrameSize(288, 512);

然后在if(!glview)语句之外的后面添加如下代码:

//设置分辨率适配,这里使用的是设计分辨率
glview->setDesignResolutionSize(284, 512, ResolutionPolicy::EXACT_FIT);

//设置默认搜索路径,这样就不需要每次搜索路径时输入一大串路径
std::vector<std::string> paths;
paths.push_back("fonts");
paths.push_back("images");
paths.push_back("sounds");
FileUtils::getInstance()->setSearchResolutionsOrder(paths);

最后在上述代码后面的  auto scene = HelloWorldScene::cerateScene();修改成auto scene = LoadingScene::create();//修改成自己定义的

4、在LoadingScene.cpp中编写:

#include "LoadingScene.h"
#include "SimpleAudioEngine.h"


//cocos2d的两个命名空间
using namespace cocos2d;
using namespace CocosDenshion;


//初始化方法
bool LoadingScene::init()
{
//onEnter();
if (!Scene::init())
return false; 

Size visibleSize = Director::getInstance()->getVisibleSize();//单例
Vec2 origin = Director::getInstance()->getVisibleOrigin();//获取位置,这样可以直接在场景中添加精灵,不用再写那么麻烦了


//添加启动画面
splashBg = Sprite::create("splash.png");
splashBg->setPosition(Vec2(origin.x + visibleSize.width / 2, origin.y + visibleSize.height / 2));//背景图位置
this->addChild(splashBg);//放置图像

//加载回调函数,用异步加载纹理
Director::getInstance()->getTextureCache()->addImageAsync("game.png", CC_CALLBACK_1(LoadingScene::loadingCallBack,this));

return true;
}

//回调函数,各种预加载
void LoadingScene::loadingCallBack(Texture2D *texture)
{
//预加载缓存纹理
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("game.plist", texture);


//预加载动画
auto birdAnimation = Animation::create();
birdAnimation->setDelayPerUnit(0.2f);//0.2秒一帧
birdAnimation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird1.png"));
birdAnimation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird2.png"));
birdAnimation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird3.png"));

//将小鸟动画添加到动画缓存
AnimationCache::getInstance()->addAnimation(birdAnimation, "birdAnimation");


//预加载音效资源
SimpleAudioEngine::getInstance()->preloadEffect("die.mp3");
SimpleAudioEngine::getInstance()->preloadEffect("hit.mp3");
SimpleAudioEngine::getInstance()->preloadEffect("point.mp3");
SimpleAudioEngine::getInstance()->preloadEffect("swooshing.mp3");
SimpleAudioEngine::getInstance()->preloadEffect("wing.mp3");


//加载完毕,跳转到游戏场景
}


这样最终的运行画面就如下图咯。其中回调函数可以先注释,运行结果一样。精彩下节继续哦



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值