感谢点评与关注,欢迎转载与分享。
勤奋努力,持之以恒!
有时在用CCEditBox时,发现输入框比较小,不易玩家点击,用户体验比较差,所以就想通过点击输入框外的其它进行点击触发,下面就给大家介绍如何实现。
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
#include "cocos-ext.h"
using namespace std;
using namespace cocos2d;
using namespace extension;
enum{
backgroundTag = 0,
};
class HelloWorld : public CCLayer, public CCEditBoxDelegate
{
public:
virtual bool init();
static cocos2d::CCScene* scene();
CCEditBox* age_edit;
CCEditBox* createEditBox(const CCSize& _size, const char* _imageName, const char* _fontName, int _fontSize,
const ccColor3B& _fontColor, const char* _pText, const ccColor3B& _pColor, int _maxLength,
int _inputMode, int _inputFlag);
virtual void editBoxEditingDidBegin(CCEditBox* editBox);
virtual void editBoxEditingDidEnd(CCEditBox* editBox);
virtual void editBoxTextChanged(CCEditBox* editBox, const std::string& text);
virtual void editBoxReturn(CCEditBox* editBox);
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);
virtual void onEnter();
virtual void onExit();
CREATE_FUNC(HelloWorld);
};
#endif // __HELLOWORLD_SCENE_H__
.cpp文件
#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
using namespace cocos2d;
using namespace CocosDenshion;
CCScene* HelloWorld::scene()
{
CCScene *scene = CCScene::create();
HelloWorld *layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if ( !CCLayer::init() )
{
return false;
}
CCSize size = CCDirector::sharedDirector()->getWinSize();
//添加一背景 当点击此背景时弹出键盘
CCSprite* background = CCSprite::create("HelloWorld.png");
background->setScale(2);
background->setPosition(ccp(size.width*0.5, size.height*0.5));
this->addChild(background,1,backgroundTag);
//年龄输入框 age
age_edit = createEditBox(CCSize(size.width*0.8, 100), "green_edit.png", "Marker Felt", 50, ccGREEN, "Age:", ccWHITE, 20, 7, -1);
age_edit->setDelegate(this);
age_edit->setEnabled(false); //设置当点击输入框时键盘不弹出
age_edit->setPosition(ccp(size.width*0.5, size.height*0.5));
this->addChild(age_edit,1);
return true;
}
/*
*_size: 输入框大小(决定框的宽高)
*_imageName: 输入框底图(可任意大小的图)
*_fontName: 所输入文字字体
*_fontSize: 所输入文字大小
*_fontColor: 所输入文字颜色
*_pText: 当编辑框中没有任何字符的提示
*_pColor: 当编辑框中没有任何字符的提示颜色
*_maxLength: 最大输入文本长度
*_inputMode: 设置输入键盘模式
*_inputFlag: 设置输入显示类型
*
*/
CCEditBox* HelloWorld::createEditBox(const CCSize& _size, const char* _imageName, const char* _fontName, int _fontSize,
const ccColor3B& _fontColor, const char* _pText, const ccColor3B& _pColor, int _maxLength,
int _inputMode, int _inputFlag)
{
CCEditBox* editBox = CCEditBox::create(_size, CCScale9Sprite::create(_imageName));
editBox->setFontName(_fontName);
editBox->setFontSize(_fontSize);
editBox->setFontColor(_fontColor);
editBox->setPlaceHolder(_pText);
editBox->setPlaceholderFontColor(_pColor);
editBox->setMaxLength(_maxLength);
//使用默认传 -1
switch (_inputMode) {
case 0://开启任何文本的输入键盘,包括换行
{
editBox->setInputMode(kEditBoxInputModeAny);
}
break;
case 1://开启 邮件地址 输入类型键盘
{
editBox->setInputMode(kEditBoxInputModeEmailAddr);
}
break;
case 2://开启 数字符号 输入类型键盘
{
editBox->setInputMode(kEditBoxInputModeNumeric);
}
break;
case 3://开启 电话号码 输入类型键盘
{
editBox->setInputMode(kEditBoxInputModePhoneNumber);
}
break;
case 4://开启 URL 输入类型键盘
{
editBox->setInputMode(kEditBoxInputModeUrl);
}
break;
case 5://开启 数字 输入类型键盘,允许小数点
{
editBox->setInputMode(kEditBoxInputModeDecimal);
}
break;
case 6://开启任何文本的输入键盘,不包括换行
{
editBox->setInputMode(kEditBoxInputModeSingleLine);
}
break;
case 7://0到9纯数字输入
{
editBox->setInputMode(kEditBoxInputModePadNumber);
}
break;
default:
break;
}
//使用默认传 -1
switch (_inputFlag) {
case 0://密码形式输入
{
editBox->setInputFlag(kEditBoxInputFlagPassword);
}
break;
case 1://敏感数据输入、存储输入方案且预测自动完成
{
editBox->setInputFlag(kEditBoxInputFlagSensitive);
}
break;
case 2://每个单词首字母大写,并且伴有提示
{
editBox->setInputFlag(kEditBoxInputFlagInitialCapsWord);
}
break;
case 3://第一句首字母大写,并且伴有提示
{
editBox->setInputFlag(kEditBoxInputFlagInitialCapsSentence);
}
break;
case 4://所有字符自动大写
{
editBox->setInputFlag(kEditBoxInputFlagInitialCapsAllCharacters);
}
break;
default:
break;
}
//设置返回类型 就是键盘右下角那个键是 return 、Done 、Send 、Search 、Go等字样
editBox->setReturnType(kKeyboardReturnTypeDone);
return editBox;
}
//开始编辑
void HelloWorld::editBoxEditingDidBegin(CCEditBox* editBox)
{
CCLog("Begin");
}
//编辑框文字改变
void HelloWorld::editBoxTextChanged(CCEditBox* editBox, const std::string& text)
{
CCLog("Changed");
}
//触发return后的回调函数
void HelloWorld::editBoxEditingDidEnd(CCEditBox* editBox)
{
CCLog("End");
}
//结束编辑
void HelloWorld::editBoxReturn(CCEditBox* editBox)
{
CCLog("Return");
CCLog("输入框内容为:%s",editBox->getText());
}
bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
CCSprite* background = (CCSprite*)this->getChildByTag(backgroundTag);
//当背景被点击时触发键盘弹出
if (background->boundingBox().containsPoint(pTouch->getLocation())) {
age_edit->touchDownAction(NULL, NULL); //弹出键盘
}
return true;
}
void HelloWorld::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent){}
void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){}
void HelloWorld::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent){}
void HelloWorld::onEnter()
{
//事件注册
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, false);
CCLayer::onEnter();
}
void HelloWorld::onExit()
{
CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
CCLayer::onExit();
}