今天将以前写的代码和项目集成到了一个菜单中,可以通过菜单切换到以前做的项目
程序的工程目录
主要代码分析:
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();}
执行结果:
总结
以上是内存溢出为你收集整理的Cocos2d-X中Menu的综合运用全部内容,希望文章能够帮你解决Cocos2d-X中Menu的综合运用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)