游戏背景层的任务是很简单的,只是根据当前时间来显示白天或者黑夜背景图,提供获取地面的高度方法。
#ifndef __EngryBird__BackgroundLayer__
#define __EngryBird__BackgroundLayer__
#include "cocos2d.h"
/** * The game background,showing the background information * in the game. */
class BackgroundLayer : public cocos2d::Layer {
public:
/**
* The default constructor
*/
BackgroundLayer();
/** * The default destructor */
~BackgroundLayer();
/** * The init method,will init the super init method first * *@H_403_19@ @return true if succeeded,otherwise false */
virtual bool init();
CREATE_FUNC(BackgroundLayer);
/** * Get the land sprite height * *@H_403_19@ @return The height of land */
static float getLandHeight();
};
#endif /* defined(__EngryBird__BackgroundLayer__) */
背景层的实现中,看看怎么判断是不是白天或者黑夜。
bool BackgroundLayer::init() {
if (!Layer::init()) {
return false;
}
// Get the current time,judge whether now is day or night
time_t t = time(NULL);
tm *localTime = localtime(&t);
int hour = localTime->tm_hour;
std::string bgName;
if (hour >= 6 && hour <= 17) {
bgName = "bg_day";
} else {
bgName = "bg_night";
}
auto bgSprite = Sprite::createWithSpriteFrame(AtlasLoader::getInstance()->getSpriteFrame(bgName));
// 这里设置成(0,0),就可以从左下角开始显示至全屏
bgSprite->setAnchorPoint(Vec2::ZERO);
bgSprite->setPosition(Vec2::ZERO);
this->addChild(bgSprite);
return true;
}
获取地面的高度:
// 其实就是加载地面精灵,然后获取其内容大小的高度
float BackgroundLayer::getLandHeight() {
auto spriteFrame = AtlasLoader::getInstance()->getSpriteFrame("land");
auto land = Sprite::createWithSpriteFrame(spriteFrame);
return land->getContentSize().height;
}
下一步,说说控制层(选项层)