ctor::getInstance()->getVisibleSize();
//原点位置
Point origin = Director::getInstance()->getVisibleOrigin();
//创建一个关闭按钮,参数分别为,正常状态显示的图片,选中状态的图片,操作调用的方法即调用MainScene的menuCloseCallback方法
auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
CC_CALLBACK_1(MainScene::menuCloseCallback, this));
//设置关闭按钮的位置为视图的右下方
closeItem->setPosition(Point(origin.x + visibleSize.width - closeItem->getContentSize().width / 2,
origin.y + closeItem->getContentSize().height / 2));
//创建菜单,请注意,最后一个参数一定是NULL
auto menu = Menu::create(closeItem, NULL);
//初始化菜单的位置为原点位置,这个我也需要找个时间理解下
menu->setPosition(Point::ZERO);
//把菜单添加到层中
this->addChild(menu, 1);
//在视图的正中间竖向位置添加2个图片按钮
auto item1 = MenuItemImage::create("btn-play-normal.png", "btn-play-selected.png", CC_CALLBACK_1(MainScene::onPushSceneOne, this));
auto item2 = MenuItemImage::create("btn-about-normal.png", "btn-about-selected.png", CC_CALLBACK_1(MainScene::onPushSceneTwo, this));
auto menu_oper = Menu::create(item1, item2, NULL);
menu_oper->alignItemsVerticallyWithPadding(50);
this->addChild(menu_oper, 1);
return true;
}
/**
* 进入NewScene的方法
*/
void MainScene::onPushSceneOne(Ref* pSender){
auto scene = Scene::create();
scene->addChild(SceneTestLayer::create());
Director::getInstance()->replaceScene(TransitionFlipX::create(.5, scene));
}
/**
*进入GameScene的方法
*/
void MainScene::onPushSceneTwo(Ref* pSender){
auto scene = Scene::create();
scene->addChild(GameSceneLayer::create());
Director::getInstance()->replaceScene(TransitionFlipX::create(.5, scene));
}
/**
* 关闭视窗的方法
* 下面是官方定义好的一个宏,意思就是,当平台为wp8或者winRT会弹出框
*/
void MainScene::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();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}
5,NewScene.h
#ifndef __NewScene_H__
#define __NewScene_H__
#include "cocos2d.h"
//创建一个SceneTestLayer类继承自cocos2d的Layer类
class SceneTestLayer : public cocos2d::Layer
{
public:
//构造函数
SceneTestLayer();
//初始化函数
bool init();
//返回主界面函数
void backToMainScene(Ref* sender);
//创建SceneTestLayer层宏
CREATE_FUNC(SceneTestLayer)
};
#endif
6,NewScene.cpp
#include "NewScene.h"
#include "MainScene.h"
USING_NS_CC;
//构造函数,这里没做什么
SceneTestLayer::SceneTestLayer(){}
/**
* 初始化函数,用来初始化界面组件
* 下面的代码很容易理解,我就不一一注解了
*/
bool SceneTestLayer::init()
{
if (Layer::init())
{
auto textItem = MenuItemFont::create("This is NewSence");
auto item = MenuItemFont::create("Back", CC_CALLBACK_1(SceneTestLayer::backToMainScene, this));
auto menu = Menu::create(textItem,item, NULL);
menu->alignItemsVertically();
this->addChild(menu);
return true;
}
return false;
}
/**
* 返回主界面的函数
*/
void SceneTestLayer::backToMainScene(Ref* sender){
auto scene = Scene::create();
scene->addChild(MainScene::create());
Director::getInstance()->replaceScene(TransitionFlipX::create(.5, scene));
}
7,GameScene.h
#ifndef __GameSceneLayer_H__
#define __GameSceneLayer_H__
#i