[cocos2d-x 学习] Scene(场景)学习

来源:互联网 发布:ib网络的网线 编辑:程序博客网 时间:2024/05/18 13:29

CCScene简介

CCScene is a subclass of CCNode that is used only as an abstract concept.CCScene an CCNode are almost identical with the difference that CCScene has it's anchor point (by default) at the center of the screen.For the moment CCScene has no other logic than that, but in future releases it might have additional logic.It is a good practice to use and CCScene as the parent of all your nodes.

上面是 cocos2d-x 官网解释关于 CCScene 解释,Scene 主要是游戏中的场景,继承与 CCNode 也是一个 Node(节点),可以理解为玩游戏中每个页面,每一个页面中又有不同的节点,例如任务,怪兽,子弹,主角等,上面也建议我们用 CCScene 作为游戏画面中的容器(parent),包括其他所有节点。

CCScene用法

主要是自己创建场景,使用 CCDirector::replaceScene(**) 和 CCDirector::pushScene(**) 2个方法来更换当前场景
在 win32 include 中新建 SceneTest.h 头文件,头文件定义如下,(#define 为了防止重复编译)
#ifndef __SCENETEST__#define __SCENETEST__#include "cocos2d.h"#include "SimpleAudioEngine.h"class Sceneclass : cocos2d::CCLayerColor {public:Sceneclass();~Sceneclass();// 初始化scenestatic cocos2d::CCScene* scene();virtual void onEnter();// 菜单点击回调函数void popScene(cocos2d::CCObject* sender);void pushScene(cocos2d::CCObject* sener);void replaceScene(cocos2d::CCObject* sender);// 添加菜单void addMenu(CCLayer* layer);};#endif

CDirector::sharedDirector()->pushScene 方法

pushScene 把当前新建的 Scene 加入到项目 scene 堆栈,并且显示到当前页面,之前的 scene 并不会消灭,如果使用 popScene 就把栈顶出栈,恢复到之前 scene

CCDirector::sharedDirector()->replaceScene 方法

replaceScene 把当前 scene 替换掉。

下面是实现的代码:
#include "SceneTest.h"using namespace cocos2d;CCScene* Sceneclass::scene(){CCScene* scene = CCScene::create();Sceneclass* layer = new Sceneclass();layer->autorelease();scene->addChild(layer);return scene;}Sceneclass::Sceneclass(){// 记得初始化CCLayerColor::initWithColor(ccc4(255, 255, 255, 255));}void Sceneclass::onEnter(){// 初始化父类CCLayerColor::onEnter();this->addMenu(this);CCLog("onEnter");}void Sceneclass::popScene(CCObject* sender){// 弹出当前scene堆栈最顶sceneCCDirector::sharedDirector()->popScene();CCLog("popScene");}void Sceneclass::pushScene(CCObject* sender){CCLog("pushScene");CCScene* scene = CCScene::create();Sceneclass* layer = new Sceneclass();layer->autorelease();layer->setColor(ccc3(76, 67, 76));// 初始化菜单this->addMenu(layer);scene->addChild(layer);// 把当前scene压入到scene堆栈,之前一个并没有清楚CCDirector::sharedDirector()->pushScene(scene);}void Sceneclass::replaceScene(CCObject* sender){CCScene* scene = CCScene::create();Sceneclass* layer = new Sceneclass();layer->autorelease();layer->setColor(ccc3(233, 23, 45));// 初始化菜单this->addMenu(layer);scene->addChild(layer);// 替换当前scene,清除前一个sceneCCDirector::sharedDirector()->replaceScene(scene);CCLog("replaceScene");}void Sceneclass::addMenu(CCLayer* layer){// 添加菜单CCMenuItemFont* item1 = CCMenuItemFont::create("popScene", this, menu_selector(Sceneclass::popScene));CCMenuItemFont* item2 = CCMenuItemFont::create("pushScene", this, menu_selector(Sceneclass::pushScene));CCMenuItemFont* item3 = CCMenuItemFont::create("replaceScene", this, menu_selector(Sceneclass::replaceScene));CCMenu* menu = CCMenu::create(item1, item2, item3, NULL);menu->alignItemsVertically();menu->setColor(ccc3(0, 0, 0));layer->addChild(menu, 1);}Sceneclass::~Sceneclass(){}

效果:





原创粉丝点击