设为首页 加入收藏

TOP

充分利用C++11特性,Cocos2dx对话框的实现(一)
2015-07-20 17:37:43 来源: 作者: 【 】 浏览:5
Tags:充分 利用 特性 Cocos2dx 对话 实现

一般一个对话框会分为模态对话框和非模态对话框两种,模态对话框是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。非模态(Modeless)对话框,又叫做无模式对话框,当用户打开非模态对话框时,依然可以操作其他窗口。例如,Windows提供的记事本程序中的【查找】对话框。(抄自百度百科)

目前我需要的一个对话框功能列表如下:

1.需要显示一段提示信息,可能是一段对话可能是一个问题。
2.必须有确认按钮,可能会有取消按钮
3.确认按钮的功能可自定义

下面是我的实现思路。

1.首先有一个初始化对话框的函数,将对话框初始化到内存中,因为对话框是一个很常用的功能,所以直接加入内存中就好了。
2.然后对话框需要载入功能和移除功能,这两样就是对话框的核心功能了
3.对话框需要按钮回调,一个是确认,一个是取消,确认可能还需要执行某些其他功能,我们可以用回调来实现,取消就直接关闭对话框,没什么好说的。
4.对话框分模态和非模态两种,模态就是在对话框层中加一个触摸屏蔽。

遵循着上面的思路,我对于对话框的函数设计如下:

	//对话框
protected:
	//初始化对话框
	void InitDialog();
	/* 加载对话框
	 * @parm:msg 消息 显示在界面上的提示消息
	 * @parm:fun 回调函数 给确定按钮调用的
	 * @parm:isNeedCancel 是否需要取消按钮
	 * @parm:isModalDialog 是否是模态对话框
	 */
	void LoadDialog(std::string msg,std::function
  
     fun,bool isNeedCancel = false,bool isModalDialog = true);
	//对话框加载完成
	void LoadDialogFinish(Armature *a, MovementEventType b, std::string c);
	//隐藏对话框
	void HideDialog();
	//隐藏对话框完成
	void HideDialogFinish(Armature *a, MovementEventType b, std::string c);
	//对话框取消按钮回调
	void PressDialogCancelBtn(Ref *pSender, Widget::TouchEventType type);
	//对话框确认按钮回调
	void PressDialogConfirmBtn(Ref *pSender, Widget::TouchEventType type);
  

为什么会有对话框加载完成和对话框隐藏完成呢?是因为我把对话框的加载和隐藏做成了两个动画,所以需要这两个附加的函数。


OK 不多说,下面是函数的具体实现:

//----------------------------------------------------------对话框-------------------------------------------------------
//初始化对话框
void MomoScene::InitDialog()
{
	ArmatureDataManager::getInstance()->addArmatureFileInfo("publish/DialogAnimation.ExportJson");    
	Dialog = Armature::create("DialogAnimation");    
	Dialog->retain();
	Dialog->setPosition(getCenterPoint());
	m_UI_Dialog->addChild(Dialog);  
	Dialog->setVisible(false);

	//加载信息
	m_DialogMsg = Label::create();
	m_DialogMsg->retain();
	m_DialogMsg->setVisible(false);
	m_DialogMsg->setColor(Color3B::WHITE);
	m_DialogMsg->enableGlow(Color4B::WHITE);
	m_DialogMsg->setPosition(Point(0,0));
	Dialog->addChild(m_DialogMsg,20);
	//加载确认按钮
	m_DialogConfirm = Button::create("Dialog_btn/confirm.png","Dialog_btn/confirm_press.png");
	m_DialogConfirm->retain();
	m_DialogConfirm->setPosition(Point(-80,-100));
	m_DialogConfirm->setVisible(false);
	Dialog->addChild(m_DialogConfirm);
	//加载取消按钮
	m_DialogCancel = Button::create("Dialog_btn/cacel.png","Dialog_btn/cacel_press.png");
	m_DialogCancel->retain();
	m_DialogCancel->setPosition(Point(80,-100));
	m_DialogCancel->setVisible(false);
	Dialog->addChild(m_DialogCancel);
}

//加载对话框
void MomoScene::LoadDialog(std::string msg,std::function
  
     fun,bool isNeedCancel,bool isModalDialog)
{
	Dialog->setVisible(true);
	Dialog->getAnimation()->playWithIndex(0); 
	Dialog->getAnimation()
		->setMovementEventCallFunc(CC_CALLBACK_3(MomoScene::LoadDialogFinish,this));
	m_DialogMsg->setString(msg);
	m_Dialog_ConfirmCallback = fun;
	//是否需要关闭按钮
	if(isNeedCancel == true)
	{
		m_DialogConfirm->addTouchEventListener(CC_CALLBACK_2(MomoScene::PressDialogConfirmBtn,this));
		m_DialogCancel->addTouchEventListener(CC_CALLBACK_2(MomoScene::PressDialogCancelBtn, this));
		m_DialogConfirm->setVisible(true);
		m_DialogCancel->setVisible(true);
	}
	else
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++重要知识点整理-思考 下一篇Codeforces Round #268 (Div. 2)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·用 Python 进行数据 (2025-12-25 15:49:09)
·如何学习Python数据 (2025-12-25 15:49:07)
·利用Python进行数据 (2025-12-25 15:49:04)
·Java 学习线路图是怎 (2025-12-25 15:19:15)
·关于 Java 学习,有 (2025-12-25 15:19:12)