不会去重复一些概念性的东西,具体的内容,我在代码中已经备注出来。先看目录,这个创建完项目目录的Classes文件夹下有4个文件,我把helloworld那两个文件直接改了名字,这里我叫MainScene 。切记,在改为名字之后需要到appDelegate.pp里面把对应的helloworld改过来。
废话不多说,直接上代码
1,appDelegate.h
- #ifndef_APP_DELEGATE_H_
- #define_APP_DELEGATE_H_
-
- #include"cocos2d.h"
-
- *cocos2d应用入口类
- *官方解释这里使用私有继承的原因是隐藏了一些导演类的接口
- *C++不是很懂,后期再好好研究下
- */
- classAppDelegate:privatecocos2d::Application
- {
- public:
- //构造函数,构造一个AppDelegate
- AppDelegate();
- //析构函数,用于回收垃圾,释放空间,这里是虚函数,建议包括本人在内的newC++er好好补习下C++基础
- //这里找到资料为:C++通过虚函数实现多态."无论发送消息的对象属于什么类,它们均发送具有同一形式的消息,对消息的处理方式可能随接手消息的对象而变"的处理方式被称为多态性。
- virtual~AppDelegate();
- *主程序的入口方法,在这里对导演和场景的初始化
- @returntrue初始化success,应用continue.
- @returnfalse初始化failed,应用terminate.
- virtualboolapplicationDidFinishLaunching();
-
- /**
- *程序转入背景运行函数
- */
- virtualvoidapplicationDidEnterBackground();
- *程序恢复运行函数
- virtualvoidapplicationWillEnterForeground();
- };
- #endif//_APP_DELEGATE_H_
2,appDelegate.cpp
copy
#include"AppDelegate.h"
#include"MainScene.h"//这里原本是HelloWorldScene,我换了名字
//使用cocos2dx的命名空间,如果不使用的话,貌似有些cocos的字段显示无法识别
USING_NS_CC;
//构建入口类
AppDelegate::AppDelegate(){
}
//析构函数,用于垃圾回收
AppDelegate::~AppDelegate()
{
//启动程序入口
boolAppDelegate::applicationDidFinishLaunching(){
//初始化导演类
autodirector=Director::getInstance();
//通过导演类获取一个OpenGL坐标系
autoglview=director->getOpenGLView();
//如果没有获取到,创建一个坐标系界面,命名为Cocos2dxSceneShow
if(!glview){
glview=GLView::create("Cocos2dxSceneShow");
director->setOpenGLView(glview);
}
//打开显示帧率
director->setDisplayStats(true);
//设置默认帧率为1.0/60,即每秒60帧
director->setAnimationInterval(1.0/60);
//创建一个允许被释放的场景MainScene
autoscene=MainScene::scene();
//入口,运行这个MainScene场景
director->runWithScene(scene);
returntrue;
//暂停应用的时候调用。比如来了电话
voidAppDelegate::applicationDidEnterBackground(){
Director::getInstance()->stopAnimation();
//如果用了音乐等SimpleAudioEngine,这里需要加上
//SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
//重新唤醒游戏调用
voidAppDelegate::applicationWillEnterForeground(){
Director::getInstance()->startAnimation();
//如果用了音乐等这里需加上
//SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
}
3,MainScene.h(helloworld那个类)
copy
#ifndef__MainScene_H__
#define__MainScene_H__
//创建一个MainScene类继承自cocos2d的Layer类
classMainScene:publiccocos2d::Layer
public:
//初始化函数,我用来定义组件
boolinit();
//创建一个场景
staticcocos2d::Scene*scene();
//转场第一个界面
voidonPushSceneOne(Ref*pSender);
//转场第二个界面
voidonPushSceneTwo(Ref*pSender);
//关闭方法
voidmenuCloseCallback(Ref*pSender);
//创建场景宏
CREATE_FUNC(MainScene);
};
#endif//__HELLOWORLD_SCENE_H__
4,MainScene.cpp
copy
//这个类开始在项目生成的时候是helloworld类,这里我改了一下
#include"MainScene.h"
//项目中调用了NewScene所以需要引用
#include"NewScene.h"
#include"GameScene.h"
//创建主场景
Scene*MainScene::scene()
//使用场景类创建一个场景
autoscene=Scene::create();
//创建一个MainScene层
MainScene*layer=MainScene::create();
//把层添加到场景里面去
scene->addChild(layer);
//返回一个场景
returnscene;
//初始化一个MainScene层
boolMainScene::init()
//层的初始化是否成功
if(!Layer::init())
returnfalse;
//获取坐标系界面的屏幕可见区域
SizevisibleSize=Director::getInstance()->getVisibleSize();
//原点位置
Pointorigin=Director::getInstance()->getVisibleOrigin();
//创建一个关闭按钮,参数分别为,正常状态显示的图片,选中状态的图片,操作调用的方法即调用MainScene的menuCloseCallback方法
autocloseItem=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
automenu=Menu::create(closeItem,NULL);
//初始化菜单的位置为原点位置,这个我也需要找个时间理解下
menu->setPosition(Point::ZERO);
//把菜单添加到层中
this->addChild(menu,1);
//在视图的正中间竖向位置添加2个图片按钮
autoitem1=MenuItemImage::create("btn-play-normal.png","btn-play-selected.png",CC_CALLBACK_1(MainScene::onPushSceneOne,this));
autoitem2=MenuItemImage::create("btn-about-normal.png","btn-about-selected.png",CC_CALLBACK_1(MainScene::onPushSceneTwo,this));
automenu_oper=Menu::create(item1,item2,226)"> menu_oper->alignItemsVerticallyWithPadding(50);
this->addChild(menu_oper,1);
returntrue;
*进入NewScene的方法
voidMainScene::onPushSceneOne(Ref*pSender){
autoscene=Scene::create();
scene->addChild(SceneTestLayer::create());
Director::getInstance()->replaceScene(TransitionFlipX::create(.5,scene));
*进入GameScene的方法
voidMainScene::onPushSceneTwo(Ref*pSender){
scene->addChild(GameSceneLayer::create());
*关闭视窗的方法
*下面是官方定义好的一个宏,意思就是,当平台为wp8或者winRT会弹出框
voidMainScene::menuCloseCallback(Ref*pSender)
#if(CC_TARGET_PLATFORM==CC_PLATFORM_WP8)||(CC_TARGET_PLATFORM==CC_PLATFORM_WINRT)
MessageBox("Youpressedtheclosebutton.WindowsStoreAppsdonotimplementaclosebutton.","Alert");
return;
#endif
Director::getInstance()->end();
#if(CC_TARGET_PLATFORM==CC_PLATFORM_IOS)
exit(0);
#endif
5,NewScene.h
copy
#ifndef__NewScene_H__
#define__NewScene_H__
//创建一个SceneTestLayer类继承自cocos2d的Layer类
classSceneTestLayer:publiccocos2d::Layer
//构造函数
SceneTestLayer();
//初始化函数
//返回主界面函数
voidbackToMainScene(Ref*sender);
//创建SceneTestLayer层宏
CREATE_FUNC(SceneTestLayer)
#endif
6,NewScene.cpp
copy
#include"NewScene.h"
USING_NS_CC;
//构造函数,这里没做什么
SceneTestLayer::SceneTestLayer(){}
*初始化函数,用来初始化界面组件
*下面的代码很容易理解,我就不一一注解了
boolSceneTestLayer::init()
if(Layer::init())
autotextItem=MenuItemFont::create("ThisisNewSence");
autoitem=MenuItemFont::create("Back",CC_CALLBACK_1(SceneTestLayer::backToMainScene,226)"> automenu=Menu::create(textItem,item,NULL);
menu->alignItemsVertically();
this->addChild(menu);
returnfalse;
*返回主界面的函数
voidSceneTestLayer::backToMainScene(Ref*sender){
scene->addChild(MainScene::create());
7,GameScene.h
copy
#ifndef__GameSceneLayer_H__
#define__GameSceneLayer_H__
classGameSceneLayer:publiccocos2d::Layer
GameSceneLayer();
boolinit();
CREATE_FUNC(GameSceneLayer)
8,GameScene.cpp
copy
GameSceneLayer::GameSceneLayer(){}
boolGameSceneLayer::init()
if(Layer::init())
autotestItem=MenuItemFont::create("ThisisGameScene");
automenu=Menu::create(testItem,0); background-color:inherit">//竖向排列,间距50
menu->alignItemsVerticallyWithPadding(50);
voidGameSceneLayer::backToMainScene(Ref*sender){
scene->addChild(MainScene::create());
OK,代码就这些,我在官方的demo(testcpp里面找了4张图片这里就不解释了)直接放到resource文件夹下面就行了
运行效果如下,简单的说就是3个层的切换
主界面如下:
点击play图片,切换到NewScene:
点击back可返回
点击MainScene的aboat图片,可进入GameScene界面
OK,就是这么简单,当然,这才刚开始,因为到本人写这篇博客为止,我看cocos2dx的资料时间也就2天,这个东西也是模拟官方demo弄的,非常的坑,不过刚开始练手还是可以的。
FROM:http://blog.csdn.net/helem_2013/article/details/36647333 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|