至于场景(Sence)的概念,就不在这里赘述了。以免让有些人弄晕了头。不过,既然我们需要的是跳转场景,则需要创建好 .h .cpp 各两个
我们最好先来看一下关于Sence的定义(快捷键是F12):
class CC_DLL Scene : public Node{
public:
static Scene *create();
virtual Scene *getScene() override;
using Node::addChild;
virtual std::string getDescription() const override;
……}
此类继承自 Node 。除此之外十分简单,也无需过多纠结。这并不是我们目前需要关心的问题。
接下来,我们要创建 .cpp .h 文件,这对于每一个人来说都很熟悉了。
#ifndef _myWorld_H //这两个均为定义,必须独一无二,也可以叫做 “保护宏”
#define _myWorld_H // 可以防止相同的文件出现
#include " cocos2d.h " // 可以理解为运行到这里时,会进入cocos2d.h 中
class myWorld : public cocos2d::Layer{
public:
static cocos2d:: Scene*createScene(); //通过静态函数创建一个场景
virtual bool init(); //这里进行的是初始化
void menuCloseCallback(cocos2d::Ref*pSender);
CREATE_FUNC(myWorld); // 通过一个 “宏” 定义 create函数,如果最后将此注释,就只有一个黑屏
};
#endif
接下来是实现: 在 .cpp 中
#include "myWorld.h"
#include "TestWorld.h"
USING_NS_CC;
Scene*myWorld:: createScene()
{
auto scene = Scene::create();
auto layer = myWorld::create();
scene->addChild(layer);
return scene;
}
bool myWorld::init()
{
auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
CC_CALLBACK_1(myWorld::menuCloseCallback,this));
closeItem->setPosition(Director::getInstance()->convertToGL(Point(600,600)));
// 上面这句是转换成OpenGL 坐标的方法
auto menu =Menu::create(closeItem,0);
menu ->setPosition(Point::ZERO);
this->addChild(menu,1);
auto sprite= Sprite::create("Skyworld.jpg");
sprite->setPosition(Point(0,0));
this ->addChild(sprite,0);
return true;
}
void myWorld::menuCloseCallback(Ref*pSender)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
return;
#endif
//Director::getInstance()->end();
//上面那句是当按下按钮时发生的事件,下面这句则是跳转场景
Director::sharedDirector()->replaceScene(TestWorld::createScene());
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
代码中出现的 TestWorld 则是需要跳转的场景,至于方法与创建第一个场景没有区别,故此就不在这里多占篇幅了。需要注意的是,图片资源需要放在项目中的 //Resources ,还需要注意的是图片的名字,否则当你敲上代码后很有可能会出现中断的错误。
确认其他地方都没有错误后,那么,就有可能是图片命名的问题!
最后……祝跳转好运 ~