zoukankan      html  css  js  c++  java
  • 【Cocos2DX 】初窥门径(12)游戏中的对话框

    在Cocos2D-X中有个CCMessageBox,可以用来创建对话框。

    CCMessageBox("this is content","title");

    这个在win32和Android上都是通用的,底层都是调用当前系统的对话框,win32效果如下图,在android 上就是调用的系统的Dialog。


    对话框虽然简单,不过系统的Dialog不怎么好看,实际开发中一般没人用系统的对话框,一个字,太丑了!我们可以利用CCLayer来自定义一个对话框。

    #include "InputWidget.h"
    
    InputWidget::InputWidget()
    {
    }
    
    InputWidget::~InputWidget()
    {
    }
    
    bool InputWidget::init()
    {
    	if (!CCLayer::init()) 
    	{
    		return false;
    	}
    	mSize=CCDirector::sharedDirector()->getWinSize();
    	mBg= CCSprite::create("DialogBg.png");
    	mBg->setPosition(ccp(mSize.width / 2, mSize.height / 2));
    	this->addChild(mBg);
    
    	CCLabelTTF* pLabel=CCLabelTTF::create("Are you sure ?","Arial",20);
    	pLabel->setPosition(ccp(mSize.width / 2, mSize.height / 2+40));
    	this->addChild(pLabel);
    
    	//创建一个输入框
    	CCTextFieldTTF* pTextField=CCTextFieldTTF::textFieldWithPlaceHolder("input","Arial",24);
    	pTextField->setPosition(ccp(mSize.width / 2, mSize.height / 2));
    	pTextField->attachWithIME();
    	this->addChild(pTextField);
    
    	CCMenuItemImage *pMenuItem = CCMenuItemImage::create(
    		"BtnOK.png",
    		"BtnOK.png",
    		this,
    		menu_selector(InputWidget::onOK));
    	pMenuItem->setPosition(ccp(mSize.width / 2, mSize.height / 2-40));
    	CCMenu* pMenu = CCMenu::create(pMenuItem,NULL);
    	pMenu->setPosition(CCPointZero);
    	this->addChild(pMenu);
    
    	return true;
    }
    
    void InputWidget::onOK(CCObject* pSender)
    {
    	this->removeFromParentAndCleanup(true);
    }

    效果图:



    效果还是挺不错的,除了素材不好看,,,,PS课程用来补充睡眠了,大家懂的,呵呵,将就着看看吧,

    最后还有一个问题,就是如果透明的部分有别的菜单,当我们点击的时候就会发现菜单依然可以点击。对话框还没关闭呢,点别的菜单界面又切换了,这肯定是不行的。

    解决办法:屏蔽触摸。

    这里给出一个解决方法,就是让Layer吞掉触摸事件。

    void InputWidget::registerWithTouchDispatcher(void){  
    	//使用int最小值做最高优先级
    	CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, INT_MIN , true); 
    }  
    
    bool InputWidget::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
    {  
    	//吞掉触摸事件
    	return true;  
    }  
    
    void InputWidget::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
    {  
    
    }  
    
    void InputWidget::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)  
    {  
    
    }  
    
    void InputWidget::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent)  
    {  
    
    } 


    这下就可以了,点击试试没有问题。




    转载请注明出处:http://blog.csdn.net/Vestigge





  • 相关阅读:
    (转)介绍一些.net开源项目
    (转).Net有哪些大型项目、大型网站的案例?
    Linux下的awk使用
    linux下的sed使用
    linux下的find、grep、cut使用
    CentOS7下的Zabbix4.4安装配置
    NetBackup linux客户端安装
    bat小脚本
    批量复制指定目录下的文件,并统计执行时间
    iptables
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3027289.html
Copyright © 2011-2022 走看看