国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

Cocos2d-x中實現彈出對話框示例

2020-01-26 15:19:26
字體:
來源:轉載
供稿:網友

在游戲中我們經常會看到彈出一個對話框讓我們進行選擇,今天我們就在cocos2dx中實現這個對話框。對話框說白了也是一個層,當我們點擊某一個按鈕的時候這個層被加進了當前的場景中,同時場景中的其他的層都是不可點擊的,這個時候就涉及到觸摸的優先級的一些問題,當然有些時候你也可以根據自己的需要讓其他的層也可以點擊,但是道理都是一樣的,學會了這個其他的按照自己的要求去實現吧。下面我將彈出層單獨分裝成一個類,供我們調用。

/*對話框場景類的頭文件*/#ifndef _POP_SCENE_H_#define _POP_SCENE_H_#include "cocos2d.h"using namespace cocos2d;class PopScene : public CCLayer{public:	static CCScene * scene();	bool init();	CREATE_FUNC(PopScene);private:	//注冊觸摸事件,實現ccTouchBegan()方法	void registerWithTouchDispatcher();	bool ccTouchBegan(CCTouch * touch,CCEvent * pevent);	//在彈出的對話框上加倆個按鈕,以下的函數是對應的按鈕的處理事件	void yesButton(CCObject * object);	void noButton(CCObject * object);	//設置對話框的title	void setTitle();	//設置對話框的文本內容	void setContent();	//m_size代表的是對話框背景的大小	CCSize m_size;	//對話框的背景精靈	CCSprite * m_bgSprite;};#endif
/*對話框場景類的具體實現*/#include "PopScene.h"CCScene * PopScene::scene(){	CCScene * scene = NULL;	do	{		scene = CCScene::create();		PopScene * layer = PopScene::create();		scene->addChild(layer);	}	while(0);	return scene;}bool PopScene::init(){	bool bRet = false;	do	{		CC_BREAK_IF(!CCLayer::init());		CCSize winSize = CCDirector::sharedDirector()->getWinSize();		//設置這個層的背景圖片,并且設置其位置為整個屏幕的中點		CCSprite * background = CCSprite::create("background.png");		m_bgSprite = background;		background->setPosition(ccp(winSize.width/2,winSize.height/2));		this->addChild(background);		//獲得背景圖片的大小		CCSize contentSize = background->getContentSize();		m_size = contentSize;		//添加倆個菜單在這個層中		CCMenuItemImage * item1 = CCMenuItemImage::create("btn-play-normal.png",			"btn-play-selected.png","",			this,menu_selector(PopScene::yesButton));		CCMenuItemImage * item2 = CCMenuItemImage::create("btn-highscores-normal.png",			"btn-highscores-selected.png","",			this,menu_selector(PopScene::noButton));		CCMenu * menu = CCMenu::create(item1,item2,NULL);		menu->alignItemsHorizontallyWithPadding(5);		menu->setPosition(ccp(contentSize.width/2,contentSize.height/3));		//kCCMenuHandlerPriority的值為-128,代表的是菜單按鈕的觸摸優先級		//設置menu優先級,這里設置為普通menu的二倍減一,原因看下邊		menu->setTouchPriority(kCCMenuHandlerPriority*2-1);		background->addChild(menu);		//設置題目和文本內容		this->setTitle();		this->setContent();		this->setTouchEnabled(true);		bRet = true;	}	while(0);	return bRet;}void PopScene::registerWithTouchDispatcher(){	//kCCMenuHandlerPriority=-128,將這個值設置為-128的二倍,可以比下邊的層的優先級高	//而且ccTouchBegan的返回值為true,說明其他的層將接受不到這個觸摸消息了,只有這個層上邊的	//菜單的優先級比他還要打,所以它上邊的菜單是可以接收到觸摸消息的	CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,		kCCMenuHandlerPriority*2,true);}bool PopScene::ccTouchBegan(CCTouch * touch,CCEvent * pevent){	return true;}//點擊菜單按鈕的時候調用的事件處理函數void PopScene::yesButton(CCObject * object){	this->removeFromParentAndCleanup(true);}void PopScene::noButton(CCObject * object){	this->removeFromParentAndCleanup(true);}//設置這個層的題目void PopScene::setTitle(){	//CCLabelTTF * title = CCLabelTTF::create("Tips","",24);	CCLabelBMFont * title = CCLabelBMFont::create("Tips","bitmapFontChinese.fnt");	title->setPosition(ccp(m_size.width/2,m_size.height-title->getContentSize().height/2));	m_bgSprite->addChild(title);}//設置層的內容void PopScene::setContent(){	CCLabelTTF * content = CCLabelTTF::create("hello! everyone,welcome to m.survivalescaperooms.com",		"",24);	content->setPosition(ccp(m_size.width/2,m_size.height/2));	//設置ttf的文本域	content->setDimensions(CCSize(this->m_size.width-60,this->m_size.height-100));	//設置ttf的水平對齊方式  content->setHorizontalAlignment(kCCTextAlignmentLeft);	m_bgSprite->addChild(content);}
//helloworld中按鈕的回調函數void HelloWorld::menuCloseCallback(CCObject* pSender){	PopScene* popLayer = PopScene::create();	this->addChild(popLayer);}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 新宾| 余干县| 永新县| 永仁县| 乌什县| 谢通门县| 洛隆县| 临沭县| 巴里| 航空| 洪泽县| 绥中县| 方城县| 同德县| 东宁县| 濮阳市| 扶绥县| 灵山县| 太康县| 滕州市| 新安县| 江阴市| 神池县| 新源县| 成武县| 大姚县| 翁源县| 无极县| 沙洋县| 长垣县| 湖口县| 岳阳市| 贡觉县| 张家川| 平顺县| 墨竹工卡县| 民丰县| 阜阳市| 甘泉县| 历史| 柞水县|