小小打灰机——1-制作游戏首界面和滚动背景
2017-09-16 18:38
369 查看
start_game.h
#ifndef START_GAME__H_
#define START_GAME__H_
#include "cocos2d.h"
USING_NS_CC;
using namespace std;
class StartGame : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene();
virtual bool init();
Size visiblesize();
void start_play();
CREATE_FUNC(StartGame);
};
#endif
start_game.cpp
#include "start_game.h"
#include "main_game.h"
cocos2d::Scene* StartGame::createScene()
{
auto scene = Scene::create();
auto layer = StartGame::create();
scene->addChild(layer);
return scene;
}
bool StartGame::init()
{
if (!Layer::init())
return false;
//游戏背景
auto spr_pg = Sprite::create("ui/bg.png");
spr_pg->setPosition(visiblesize().width/2,visiblesize().height/2);
addChild(spr_pg);
auto dic = Dictionary::createWithContentsOfFile("fonts/text.xml");
auto str1 = (String*)(dic->objectForKey("title"));
auto title = Label::create();
title->setString(str1->getCString());
title->setSystemFontSize(60);
title->setPosition(visiblesize().width/2,visiblesize().height- title->getContentSize().height);
title->setColor(Color3B(174,111,23));
addChild(title);
//帧动画
auto animation = Animation::create();
for(int i=1; i<=4; i++)
{
auto spr_name = String::createWithFormat("ui/start%d.png",i);
animation->addSpriteFrameWithFile(spr_name->getCString());
}
animation->setDelayPerUnit(0.3f);
animation->setLoops(-1);//帧动画播放次数——为-1时无限循环
auto animate = Animate::create(animation);
auto zhensprite = Sprite::create("ui/start1.png");
zhensprite->setPosition(visiblesize().width/2, visiblesize().height/2);
addChild(zhensprite);
zhensprite->runAction(animate);
auto str2 = (String*)(dic->objectForKey("play"));
auto btn_label = Label::create();
btn_label->setString(str2->getCString());
btn_label->setSystemFontSize(40);
auto start_menu = MenuItemLabel::create(btn_label, CC_CALLBACK_0(StartGame::start_play, this));
start_menu->setPosition(visiblesize().width/2, visiblesize().height*0.3);
auto menu = Menu::create(start_menu, NULL);
menu->setPosition(Size::ZERO);
addChild(menu);
return true;
}
Size StartGame::visiblesize()
{
return Director::getInstance()->getWinSize();
}
void StartGame::start_play()
{
log("ss");
Director::getInstance()->replaceScene(TransitionFadeTR::create(0.5, MainGame::createScene()));
}
滚动背景的难点在于,首先要用两张相同图片进行y坐标移动。
另外,代码中使用到了onEnterTransitionDidFinish()和onExit()函数,这是我之前没有接触到的,并且还有一个与之差异的onEnter()
具体差异是:
onEnter() 是在进入场景的一瞬间就开始执行了。
onEnterTransitionDidFinish() 是在完全进入场景后开始执行的。
main_game.h
#ifndef MAIN_GAME__H_
#define MAIN_GAME__H_
#include "cocos2d.h"
USING_NS_CC;
using namespace std;
class MainGame : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene();
virtual bool init();
Size visiblesize();
void onEnterTransitionDidFinish();
void update(float t);
CREATE_FUNC(MainGame);
private:
Sprite* spr_bg1_;
Sprite* spr_bg2_;
};
#endif
main_game.cpp
#include "main_game.h"
cocos2d::Scene* MainGame::createScene()
{
auto scene = Scene::create();
auto layer = MainGame::create();
scene->addChild(layer);
return scene;
}
bool MainGame::init()
{
if (!Layer::init())
return false;
//背景1
spr_bg1_ = Sprite::create("ui/bgs.png");
spr_bg1_->setPosition(visiblesize().width/2 , visiblesize().height/2);
this->addChild(spr_bg1_);
//背景2
spr_bg2_ = Sprite::create("ui/bgs.png");
spr_bg2_->setPosition(ccp(visiblesize().width/2, spr_bg1_->getContentSize().height - 2));
this->addChild(spr_bg2_);
return true;
}
Size MainGame::visiblesize()
{
return Director::getInstance()->getWinSize();
}
void MainGame::onEnterTransitionDidFinish()
{
Layer::onEnterTransitionDidFinish();
scheduleUpdate();
}
void MainGame::update(float t)
{
//实现背景滚动
float y1 = spr_bg1_->getPositionY() - 3;
float y2 = spr_bg2_->getPositionY() - 3;
spr_bg1_->setPositionY(y1);
spr_bg2_->setPositionY(y2);
//判断背景图片是否超出边界
if (y1 < -spr_bg1_->getContentSize().height/2)
{
spr_bg1_->setPositionY(spr_bg2_->getPositionY() + spr_bg2_->getContentSize().height - 2);
}
else if (y2 < -spr_bg2_->getContentSize().height/2)
{
spr_bg2_->setPositionY(spr_bg1_->getPositionY() + spr_bg1_->getContentSize().height - 2);
}
}
相关文章推荐
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 03.游戏界面 背景层实现滚动
- 一、实现欢迎界面和游戏背景图的滚动(雷霆战机)
- 一款启动界面加加上滚动背景的 打飞机游戏
- unity3d学习笔记(八)--NGUI制作游戏界面
- Unity3D~2D游戏背景的循环滚动
- (译)使用cocos2d和box2d制作滚动背景
- XNA游戏开发之滚动背景
- Unity3D循环滚动的背景图片?制作方法!!!!
- Axure制作手机UI原型之界面滑动滚动效果
- 2D游戏引擎(十一)—— 向游戏引擎添加滚动背景支持
- 《MFC游戏开发》笔记七 游戏特效的实现(一):背景滚动
- 游戏编程入门(21):使用滚动背景更改远景
- unity制作游戏中掉血飘红滚动数值的制作
- 【unity3d学习笔记】Shader-通过Shader实现2D游戏中无限滚动的背景Shader
- android游戏开发之我的小小游戏1——五子棋游戏之界面的优化、代码整理
- Unity手机开发之巧妙利用纹理制作滚动背景
- cocos2d中分步实现飞机大战----游戏场景中背景的滚动
- unity3d学习笔记(八)--NGUI制作游戏界面
- XNA游戏开发之滚动背景
- Cocos3.4 横版游戏制作-《KillBear》-边缘检测 地图滚动