一个都不能死4 游戏层 分析:

游戏层包含人,物块,地面三个元素,故定义为Layer类

往游戏层中加入元素,设置schedule定时添加物块

添加jump()方法,使人物可以向上跳起

在主场景中添加游戏层GameLayer.h

#include “cocos2d.h”

#include “Hero.h”

#include “Block.h”

#include “Edge.h”

class GameLayer : public Layer

{

public:

//根据Y轴位置初始化游戏层

virtual bool init(float positionY);

static GameLayer* create(float positionY);

//按一定时间间隔添加物块

void resetTime();

void addBlock();

void update(float dt);

//向上跳

void jump();

Node* getEdge();

private:

float _positionY;

Hero *_hero;

Node *_edge;

int oldTime;

int curTime;

Size visibleSize;

};

GamLayer.cpp

#include “GameLayer.h”

USING_NS_CC;

GameLayer* GameLayer::create(float positionY)

{

auto game = new GameLayer();

game->init(positionY);

game->autorelease();

return game;

}

bool GameLayer::init(float positionY)

{

Layer::init();

_positionY = positionY;

visibleSize = Director::getInstance()->getVisibleSize();

//重置计时器

resetTime();

//添加物理边界

_edge = Edge::create();

_edge->setPosition(visibleSize.width/2, _positionY+70);

addChild(_edge);

//添加地板

auto floor = Sprite::create();

floor->setTextureRect(Rect(0,0,visibleSize.width,3));

floor->setColor(Color3B(0,0,0));

floor->setPosition(visibleSize.width/2,_positionY+1.5);

addChild(floor);

//添加人物

_hero = Hero::create();

_hero->setPosition(50,_positionY+_hero->getContentSize().height/2);

addChild(_hero);

//添加障碍物计时器

scheduleUpdate();

return true;

}

//按一定时间间隔添加物块

void GameLayer::update(float dt)

{

oldTime++;

if(oldTime >= curTime)

{

addBlock();

resetTime();

}

}

void GameLayer::resetTime()

{

oldTime = 0;

curTime = (rand()%60)+100;

}

void GameLayer::addBlock()

{

auto b = Block::create();

b->setPositionY(_positionY+b->getContentSize().height/2);

addChild(b);

}

void GameLayer::jump()

{

if (_hero->getPositionY()<_positionY+_hero->getContentSize().height/2+5) {

_hero->getPhysicsBody()->setVelocity(Point(0, 400));

}

}

Node* GameLayer::getEdge()

{

return _edge;

}