今天将以前写的代码和项目集成到了一个菜单中,可以通过菜单切换到以前做的项目
程序的工程目录
主要代码分析:
LessonMenu.h中实现创建菜单,遍历菜单通过菜单切换到各个项目
#ifndef _LessonMenu_H_
#define _LessonMenu_H_
#include "cocos2d.h"
USING_NS_CC;
class LessonMenu : public CCLayer
{
public:
bool init();
static CCScene* scene();
void EnterLasson(CCObject* sender);
//处理触摸事件
bool ccTouchBegan(CCTouch*,CCEvent);
void ccTouchMoved(CCTouch*, CCEvent*);
CREATE_FUNC(LessonMenu);
};
#endif
LessonMenu.cpp中实现具体的功能
#include "LessonMenu.h"
#include"Label.h"
#include"MenuItem.h"
#include"TextFieldTTF.h"
#include"AppMacros.h"
#include"LabelAtlas.h"
#include"SceneSecond.h"
#include"TextFieldTTF1.h"
#include"BMFont.h"
#include"Layer.h"
#include"Sprite.h"
#include"Zorder.h"
#include"Coord.h"
#include"Sprite1.h"
#include"TCCEditBox.h"
#include"Menu.h"
#include "MenuContinus.h"
#include "T14SwitchControl.h"
#include "T15Slider.h"
CCScene* LessonMenu::scene()
{
CCScene* s = CCScene::create();
LessonMenu* layer = LessonMenu::create();
s->addChild(layer);
return s;
}
//保存创建的cpp文件
static const char* lessons[] =
{
"BMFont.cpp",
"Coord.cpp",
"Label.cpp",
"LabelAtlas.cpp",
"Layer.cpp",
"Menu.cpp",
"MenuItem.cpp",
"SceneSecond.cpp",
"Sprite.cpp",
"Sprite1.cpp",
"TCCEditBox.cpp",
"TextFieldTTF.cpp",
"TextFieldTTF1.cpp",
"Zorder.cpp",
"MenuContinus.cpp",
"T14SwitchControl.cpp",
"T15Slider.cpp"
};
bool LessonMenu::init()
{
CCLayer::create();
//创建菜单
CCMenu* menu = CCMenu::create();
addChild(menu);
for(int i = 0; i < sizeof(lessons)/sizeof(*lessons); i++)
{
//创建菜单项
CCMenuItemFont* item = CCMenuItemFont::create(lessons[i]);
menu->addChild(item);
//设置处理函数
item->setTarget(this, menu_selector(LessonMenu::EnterLasson));
//设置菜单项的ID
item->setTag(10000 + i);
}
//对齐菜单项
menu->alignItemsVertically();
//触摸菜单项
setTouchEnabled(true);
setTouchMode(kCCTouchesOneByOne);
return true;
}
void LessonMenu::EnterLasson(CCObject* sender)
{
//强制类型转换
CCMenuItem* item = dynamic_cast<CCMenuItem*>(sender);
//得到菜单项的ID
int tag = item->getTag() - 10000;
//用于调用场景
CCScene* scene = NULL;
switch(tag)
{
case 0:
{
scene = BMFont::scene();
}
break;
case 1:
{
scene = Coord::scene();
}
break;
case 2:
{
scene = Label::scene();
}
break;
case 3:
{
scene = LabelAtlas::scene();
}
break;
case 4:
{
scene = Layer::scene();
}
break;
case 5:
{
scene = Menu::scene();
}
break;
case 6:
{
scene = MenuItem::scene();
}
break;
case 7:
{
scene = SceneSecond::scene();
}
break;
case 8:
{
scene = Sprite::scene();
}
break;
case 9:
{
scene = Sprite1::scene();
}
break;
case 10:
{
scene = TCCEditBox::scene();
}
break;
case 11:
{
scene = TextFieldTTF::scene();
}
break;
case 12:
{
scene = TextFieldTTF1::scene();
}
break;
case 13:
{
scene = Zorder::scene();
}
break;
case 14:
{
scene = MenuContinus::scene();
}
break;
case 15:
{
scene = T14SwitchControl::scene();
}
break;
case 16:
{
scene = T15Slider::scene();
}
break;
}
if(scene)
{
CCDirector::sharedDirector()->pushScene(scene);
}
}
//处理触摸事件
bool LessonMenu::ccTouchBegan(CCTouch* touch,CCEvent)
{
return true;
}
//处理触摸事件
void LessonMenu::ccTouchMoved(CCTouch* touch, CCEvent*)
{
// 获得触摸移动的距
CCPoint ptDelta = touch->getDelta();
// 只上下滑动的方法
setPositionY(getPositionY() + ptDelta.y);
}
LayerBack.h实现创建一个只有一个返回按钮的层,通过返回按钮实现场景切换
#ifndef _LayerBack_H_
#define _LayerBack_H_
#include "cocos2d.h"
USING_NS_CC;
class LayerBack : public CCLayer
{
public:
bool init();
void back(CCObject*);
};
#endif
LayerBack.cpp中是具体实现的代码
#include "LayerBack.h"
bool LayerBack::init()
{
CCLayer::init();
//得到窗口的尺寸
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCMenu* menu = CCMenu::create();
addChild(menu);
CCMenuItem* backItem = CCMenuItemImage::create("CloseNormal.png", "CloseSelected.png",
this, menu_selector(LayerBack::back));
menu->addChild(backItem);
//设置菜单项的位置(将菜单项设置到右下角)
backItem->setPosition(ccp(winSize.width / 2 - backItem->getContentSize().width / 2,
backItem->getContentSize().height / 2 - winSize.height / 2));
return true;
}
void LayerBack::back(CCObject*)
{
//场景切换
CCDirector::sharedDirector()->popScene();
}
执行结果: