大佬教程收集整理的这篇文章主要介绍了华容道08之菜单界面和选关界面的添加,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当作最后一篇吧,虽然还不能说是个游戏,但是,作为一个瞎玩的Demo感觉也可以了。
玩家信息类Profile:
Profile设计为一个单例类,在游戏中主要负责保存和读取玩家的信息,其实,Demo中没有什么好保存的信息,但是,在选关的时候需要把选关的ID保存下来,在GameLayer中使用,所以,暂时添加了这个类。
.h
#ifndef _PROFILE_H_ #define _PROFILE_H_ #include "cocos2d.h" class Profile : public cocos2d::ref { public: static Profile * s_pProfile; static Profile * geTinstance(); static bool initStatic(); static void finalizeStatic(); public: Profile(); ~Profile(); //@biref 选中的关卡的ID CC_SYNTHESIZE(int,m_SELELevelID,SELELevelID); private: }; #endif
.cpp
#include "Profile.h" Profile * Profile::s_pProfile = nullptr; Profile * Profile::geTinstance() { if (!s_pProfilE) { s_pProfile = new Profile(); } return s_pProfile; } bool Profile::initStatic() { s_pProfile = new Profile(); return true; } void Profile::finalizeStatic() { CC_SAFE_RELEASE_NULL(s_pProfilE); } Profile::Profile() :m_SELELevelID(-1) { m_SELELevelID = 0;//<默认选中的关切ID为0 } Profile::~Profile() { }
之前没有用过cocostudio做界面,通过这个项目也学习下cocostudio的一些使用方法,菜单界面和选关界面就用cocostudio做了。
菜单界面:
用cocostudio拼出了界面,然后在程序中使用,并添加了开始按钮和退出按钮的点击回调。
使用代码如下:
@H_307_91@menuLayer.h
#ifndef _MENU_LAYER_H_ #define _MENU_LAYER_H_ #include "cocos2d.h" #include "ui/CocosGUI.h" class MenuLayer : cocos2d::Layer { public: static const int BUTTON_TAG_START = 10; static const int BUTTON_TAG_CLOSE = 20; static cocos2d::Scene* createScene(); CREATE_FUNC(MenuLayer); public: MenuLayer(); ~MenuLayer(); virtual bool init(); void buttonClickCallBACk(cocos2d::ref *pSender,cocos2d::ui::Widget::TouchEventType typE); private: }; #endif@H_686_100@menuLayer.cpp
#include "MenuLayer.h" #include "cocostudio/Cocostudio.h" #include "LevelScene.h" using namespace cocostudio::timeline; using namespace cocos2d::ui; USING_NS_Cc; Scene* MenuLayer::createScene() { auto scene = Scene::create(); auto layer = MenuLayer::create(); scene->addChild(layer); return scene; } MenuLayer::MenuLayer() { } MenuLayer::~MenuLayer() { } bool MenuLayer::init() { Layer::init(); Node * rootNode = CSLoader::createNode("MenuLayer.csb"); this->addChild(rootNodE); auto buttonStart = dynamic_cast<Button*>(rootNode->getChildByName("button_start")); buttonStart->addTouchEventListener(CC_CALLBACK_2(MenuLayer::buttonClickCallBACk,this)); buttonStart->setTag(BUTTON_TAG_START); auto buttonClose = Button::create("CloseNormal.png","CloseSELEcted.png"); buttonClose->setPosition(Vec2(20,20)); rootNode->addChild(buttonClosE); buttonClose->addTouchEventListener(CC_CALLBACK_2(MenuLayer::buttonClickCallBACk,this)); buttonClose->setTag(BUTTON_TAG_CLOSE); return true; } void MenuLayer::buttonClickCallBACk(Ref *pSender,Widget::TouchEventType typE) { log("button clicked"); Node * pNode = dynamic_cast<Node*>(pSender); if (pNode->getTag() == BUTTON_TAG_START) { Director::geTinstance()->replaceScene(LevelScene::createScene()); } else if (pNode->getTag() == BUTTON_TAG_CLOSE) { Director::geTinstance()->end(); } }
选关界面:
选关界面也是在cocostudio中做的,用到了ListvView,添加了ListView的点击回调,根据点击的Cell设置关卡的ID,进入游戏界面
LevelScene.h
#ifndef _MY_SCENE_H_ #define _MY_SCENE_H_ #include "cocos2d.h" #include "ui/CocosGUI.h" class LevelScene : public cocos2d::Scene { public: static Scene * createScene(); public: LevelScene(); ~LevelScene(); virtual bool initSelf(); void SELEctedItemEvent(cocos2d::ref* pSender,cocos2d::ui::ListView::EventType typE); void SELEctedItemEventScrollView(cocos2d::ref* pSender,cocos2d::ui::ScrollView::EventType typE); private: };
LevelScene.cpp
#include "LevelScene.h" #include "cocostudio/Cocostudio.h" #include "data/Profile.h" #include "GameLayer.h" using namespace cocostudio::timeline; using namespace cocos2d::ui; USING_NS_Cc; Scene * LevelScene::createScene() { auto scene = new LevelScene(); scene->initSelf(); scene->autorelease(); return scene; } LevelScene::LevelScene() { } LevelScene::~LevelScene() { } bool LevelScene::initSelf() { Node * rootNode = CSLoader::createNode("MainScene.csb"); this->addChild(rootNodE); auto node = dynamic_cast<Layout*>(rootNode->getChildByName("BG")); auto listView = dynamic_cast<ListView*>(node->getChildByName("ListView_3")); listView->addEventListener((ListView::ccListViewCallBACk)CC_CALLBACK_2(LevelScene::SELEctedItemEvent,this)); //下面这个回调函数是不用的,只是为了测试 listView->addEventListener((ListView::ccScrollViewCallBACk)CC_CALLBACK_2(LevelScene::SELEctedItemEventScrollView,this)); return true; } void LevelScene::SELEctedItemEvent(Ref* pSender,ListView::EventType typE) { switch (typE) { case ListView::EventType::ON_SELECTED_ITEM_START: { ListView* listView = static_cast<ListView*>(pSender); CC_UNUSED_PARAM(listView); //CCLOG("SELEct child start index = %ld",listView->getCurSELEctedIndex()); break; } case ListView::EventType::ON_SELECTED_ITEM_END: { ListView* listView = static_cast<ListView*>(pSender); CC_UNUSED_PARAM(listView); //CCLOG("SELEct child end index = %ld",listView->getCurSELEctedIndex()); Profile::geTinstance()->setSELELevelID(listView->getCurSELEctedIndex()); log("LevelID:%d",Profile::geTinstance()->getSELELevelID()); //切换界面 Director::geTinstance()->replaceScene(GameLayer::createScene()); break; } default: break; } } void LevelScene::SELEctedItemEventScrollView(Ref* pSender,ui::ScrollView::EventType typE) { switch (typE) { case ScrollView::EventType::SCROLL_TO_BOTTOM: //CCLOG("SCROLL_TO_BOTTOM"); break; case ScrollView::EventType::SCROLL_TO_TOP: //CCLOG("SCROLL_TO_TOP"); break; default: break; } }
以上是大佬教程为你收集整理的华容道08之菜单界面和选关界面的添加全部内容,希望文章能够帮你解决华容道08之菜单界面和选关界面的添加所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。