飞机大战开发01之添加主逻辑层,显示背景的移动

来源:互联网 发布:德勤财务咨询 知乎 编辑:程序博客网 时间:2024/05/29 12:29

GameLayer

负责游戏的主逻辑的实现:

代码:

 

GameLayer.h

#ifndef _GAME_LAYER_H_#define _GAME_LAYER_H_#include "cocos2d.h"USING_NS_CC ;class GameLayer : public Layer{public:static cocos2d::Scene* createScene();CREATE_FUNC(GameLayer);public:GameLayer();~GameLayer();virtual bool init();private:Sprite * m_pPlayerPlane ;Vec2 m_touchBeginPos;Vec2 m_touchMovePos ;};#endif

GameLayer.cpp

#include "GameLayer.h"cocos2d::Scene* GameLayer::createScene(){auto scene = Scene::create() ;auto layer = GameLayer::create();scene->addChild(layer);return scene;}GameLayer::GameLayer(){}GameLayer::~GameLayer(){}bool GameLayer::init(){Size screenSize = Director::getInstance()->getWinSize() ;return true;}

场景的移动:

雷电游戏的背景都是头尾相接的,所以,背景的移动动画只需要两张图就能搞定,当一张图移出屏幕的时候,设置它的坐标到屏幕的上方,如此循环就OK了。

代码:

BGLayer.h

#ifndef _BG_LAYER_H_#define _BG_LAYER_H_#include "cocos2d.h"USING_NS_CC ;class BGLayer : public Layer{public:CREATE_FUNC(BGLayer) ;public:BGLayer();~BGLayer();virtual bool init();void update(float dt);public:Sprite * m_pBG_1;Sprite * m_pBG_2;float m_speed ;};#endif


 

BGLayer.cpp

#include "BGLayer.h"BGLayer::BGLayer():m_pBG_1(nullptr),m_pBG_2(nullptr),m_speed(0){m_speed = 1.0f ;}BGLayer::~BGLayer(){}bool BGLayer::init(){float x = 0 ;float y = 0 ;m_pBG_1 = Sprite::create("img_bg_1.jpg") ;m_pBG_2 = Sprite::create("img_bg_1.jpg") ;x = m_pBG_1->getBoundingBox().size.width / 2 ;y = m_pBG_1->getBoundingBox().size.height / 2 ;m_pBG_1->setPosition(Vec2(x,y)) ;y = y + m_pBG_1->getBoundingBox().size.height ;m_pBG_2->setPosition(Vec2(x,y)) ;addChild(m_pBG_1) ;addChild(m_pBG_2) ;this->scheduleUpdate();return true ;}void BGLayer::update(float dt){float posY = m_pBG_1->getPositionY() - m_speed ;if (posY <= -m_pBG_1->getBoundingBox().size.height / 2){posY = Director::getInstance()->getWinSize().height + m_pBG_1->getBoundingBox().size.height / 2 ;}m_pBG_1->setPositionY(posY) ;posY = m_pBG_2->getPositionY() - m_speed ;if (posY <= -m_pBG_2->getBoundingBox().size.height / 2){posY = Director::getInstance()->getWinSize().height + m_pBG_2->getBoundingBox().size.height / 2 ;}m_pBG_2->setPositionY(posY) ;}


将场景添加到主逻辑层中

bool GameLayer::init(){addChild(BGLayer::create()) ;return true;}



 

0 0
原创粉丝点击