Cocos2d-x   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了华容道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,请注明来意。