您的位置:首页 > 移动开发 > Cocos引擎

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

2016-02-23 16:44 417 查看
从这一节开始要真正进入节奏了。首先非常感谢泰课在线的老师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");

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

}

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: