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");
//加载完毕,跳转到游戏场景
}
这样最终的运行画面就如下图咯。其中回调函数可以先注释,运行结果一样。精彩下节继续哦
一、首先来看上节创建的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");
//加载完毕,跳转到游戏场景
}
这样最终的运行画面就如下图咯。其中回调函数可以先注释,运行结果一样。精彩下节继续哦
相关文章推荐
- Cocos2d-x开发FlappyBird01-环境变量配置和测试案例运行
- 全局调度-Quick-Cocos2dx
- cocos2d-x3.6 连连看随机地图实现
- Cocos2d-html5入门 (跨平台游戏开发)
- 自学 cocos2d 游戏开发应该按什么步骤进行?
- Cocos2d-x 3.x瓦片地图
- Cocos2d-x实例:设置背景音乐与音效-HelloWorld场景实现
- 第一个Cocos2d-JS游戏
- 【cocos3.x+tilemap】制作rpg小游戏(一)地图制作
- cocos2d-x移植到android如何读取Excel文件
- Cocos Studio如何做分辨率适配
- Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3
- cocos-js 对js的容错处理模式
- cocos2dx学习之路----第六篇(cocos2dx坐标系系统简单窥视)
- cocos2dx学习之路----第五篇(切换场景的另一种方式:使用popScene与pushScene)
- cocos2dx中 Node 在shader使用v_texCoord
- 分析cocos2d-x在Android上的编译过程(1):cocco2d-x是怎样生成的Android的文件夹结构
- Cocos2dx-lua 播放音循环播放问题
- cocos2d-js进度条
- eclipse 中编译cocos2dx 代码,报错:Description Resource Path Location Type *** Android NDK: Aborting. . S