主场景,继承自Scene,
#pragma once
#include "cocos2d.h"
#include "BackgroundLayer.h"
#include "GameLayer.h"
#include "InfoLayer.h"
USING_NS_CC;
class MainScene:public Scene
{
public:
bool init();
CREATE_FUNC(MainScene);
private:
void timeCallBack(float f);
void goldCallBack(float f);
BackgroundLayer *bgLayer;
GameLayer *gameLayer;
InfoLayer *infoLayer;
};
#include "MainScene.h"
bool MainScene::init()
{
if (!Scene::init())
{
return false;
}
bgLayer = BackgroundLayer::create();//载入背景层
bgLayer->setAnchorPoint(Point::ZERO);
bgLayer->setPosition(Point::ZERO);
this->addChild(bgLayer);
gameLayer = GameLayer::create();//加入游戏层
gameLayer->setAnchorPoint(Point::ZERO);
gameLayer->setPosition(Point::ZERO);
this->addChild(gameLayer);
infoLayer = InfoLayer::create();//加入信息层
infoLayer->setPosition(Point::ZERO);
this->addChild(infoLayer);
this->schedule(schedule_selector(MainScene::timeCallBack), 0.1f);//设置物体移动定时器
this->schedule(schedule_selector(MainScene::goldCallBack), 0.016f);//设置金币碰撞定时器
return true;
}
void MainScene::timeCallBack(float f)
{
gameLayer->timeCallBcak(f);//游戏层的定时器改到这来调用了(改不改无所谓)
if (gameLayer->IsDie())//关键是这,实现信息交互和场景转换
{
auto scene = GameOverScene::create();//人物失望则跳到游戏结束场景
scene->setNum(infoLayer->getGoldNum(), infoLayer->getDisNum());//将参数传给游戏结束场景
auto fade = TransitionFade::create(0.1, scene);
Director::getInstance()->replaceScene(fade);
}
infoLayer->distanceAddOne();//没结束则距离+1;
}
void MainScene::goldCallBack(float f)
{
if (gameLayer->IscollWithGold())//游戏层人物与金币碰撞则信息层金币数+1
{
infoLayer->goldAddOne();
Sounder::getInstance()->playGold();
}
}