声 明本教程仅用于初学cocos2dx同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用cocos2dx版本为2.1.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。gl.paea.cn版权所有。
Hello,大家好,欢迎回到“和屌丝一起学cocos2dx”系列教程。上节我们说到了CCMenu菜单,不知道大家练习的怎么样了呢?哈哈,一定是没好好练习吧。可是我可不能等你们哦,所以加快进度吧。好了,这节我们就开始学习一个新控件-CCEditBox。一起来学习吧。
CCEditBox看起来和CCTextFieldTTF十分的相似,因为他们两个都是用来输入文字的输入框,但是有相同就有所不同,CCEditBox的功能要比CCTextFieldTTF的功能强大的多,但是带来的是,使用起来也要麻烦一点啦。好了下面我们就开始来攻克它吧。
首先还是一样,新建一个项目,我们命名为Cceditboxdemo吧。
【一】:引用cocos-ext.h
这里因为这些东西都是2.0版本以后的心玩意,所以我们需要引入他们,他们在一个叫cocos-ext.h的文件里定义,我们去引用一下。
我们在ccp文件上输入#include "cocos-ext.h",可是你会发现系统提示,找不到,我们不是已经把cocos2dx的安装目录引入了吗?哈哈,这里是因为这个类库并不是直接在cocos2dx的引入库的,我们要去搬运一下。
先找到扩展类库的位置。例如:C:\cocos2dx\extensions\这时候我们就看到了cocos-ext.h文件了,可是怎么引用他呢?有些教程说的是直接吧下面的一些文件拷贝到项目目录里,然后再添加进项目就可以了,我是你们知道的,我比较懒,这样每次用到都去拷贝肯定不是我的风格,怎么办呢?突然想到一件事,我们一开始的时候不也是遇到要拷贝文件才能调用的情况吗?我们那时候是修改了模板文件解决了,这次行不行的通呢?我们找到那个配置的js C:\cocos2dx\template\msvc\CCAppWiz.win32\Scripts\1033\default.js 打开它,我们可以看到这里都是我们之前修改过的路径,那么我们看看加上我们要的这个外部类路劲能不能引用进去(这里我放在第一位,因为我试了几次放在下面的都没成功,不知道什么原因)。
然后我新建了个项目,直接去搜一下cocos-ext.h。
哈哈,找到了,看来成功了,好了,我们继续。(注:这里我没有使用原来的项目。修改配置文件后我重新建立的项目运行,原有项目因为可能已经创建好了所以引用目录都写进程序了,不会正常引入cocos-ext.h文件)
【二】:CCEditBox
方法:
CCEditBox::create("CCSize对象","CCScale9Sprite对象");
CCScale9Sprite对象,是一种CCSprite对象的变形,它的用法和CCSprite一样,不同点是,CCScale9Sprite对象有个特性就是缩放贴图时可以尽量不失帧。
函数解析:
setText("字符串"); //设置文本
setFontColor(color); //设置文本颜色
setPlaceHolder("文本"); //设置预设文本
getPlaceHolder(对象); //获得预设文本
setMaxLength(对象); //设置最大长度
getMaxLength(对象); //获得最大长度
setInputMode(); //设置键盘模式
setInputFlag(); //设置文本类型
setReturnType(); //设置键盘return类型
1.setInputMode
这里cocos2dx给我们提供了很多键盘的模式,我们来一一了解下。
kEditBoxInputModeAny //文本键盘(含换行)
kEditBoxInputModeEmailAddr //邮件类键盘
kEditBoxInputModeNumeric //数字符号键盘
kEditBoxInputModePhoneNumber //电话号码键盘
kEditBoxInputModeUrl //URL键盘
kEditBoxInputModeDecimal //输入键盘(含小数点)
kEditBoxInputModeSingleLine //文本键盘(不含换行)
2.setInputFlag
这里cocos2dx给我们提供了5种文本类型。
kEditBoxInputFlagPassword //密码形式
kEditBoxInputFlagSensitive //敏感数据输入
kEditBoxInputFlagInitialCapsWord //每个单词首字符大写,并有提示
kEditBoxInputFlagInitialCapsSentence //第一句首字符大写,并有提示
kEditBoxInputFlagInitialCapsAllCharacters //自动大写
3.setReturnType
这里cocos2dx给我们提供了5种键盘返回类型。
kKeyboardReturnTypeDefault //默认类型
kKeyboardReturnTypeDone //Done字样
kKeyboardReturnTypeSend //Send字样
kKeyboardReturnTypeSearch //Search字样
kKeyboardReturnTypeGo //Go字样
【三】:示例
好了,光说不练可不行,我们来试一下做个登录界面吧。
1.和CCtextFieldTTF一样,我们需要一个监控事件来操作。让我们的类继承CCEditBoxDelegate接口。
我们修改Cceditboxdemo.h文件。先要导入cocos-ext.h,然后引用命名空间using namespace cocos2d::extension;
//开始编辑
virtual void editBoxEditingDidBegin(cocos2d::extension::CCEditBox * myeditbox);
//结束编辑
virtual void editBoxEditingDidEnd(cocos2d::extension::CCEditBox * myeditbox);
//编辑框文字改变
virtual void editBoxTextChanged(cocos2d::extension::CCEditBox * myeditbox,const std::string&text);
//触发return后的回调函数
virtual void editBoxReturn(cocos2d::extension::CCEditBox * myeditbox);
2.然后我们去cpp文件修改修改
CCScale9Sprite * scale9one = CCScale9Sprite::create("boxbg.png");
CCEditBox * myeditbox1=CCEditBox::create(CCSizeMake(200,40),scale9one);
myeditbox1->setInputMode(kEditBoxInputModeSingleLine);
myeditbox1->setPosition(ccp(mysize.width/2,mysize.height-100));
this->addChild(myeditbox1);
myeditbox1->setDelegate(this);
CCEditBox * myeditbox2=CCEditBox::create(CCSizeMake(200,40),scale9one);
myeditbox2->setInputMode(kEditBoxInputModeSingleLine);
myeditbox2->setInputFlag(kEditBoxInputFlagPassword);
myeditbox2->setPosition(ccp(mysize.width/2,mysize.height-200));
this->addChild(myeditbox2);
myeditbox2->setDelegate(this);
3.我们运行可是提示我们“error LNK2019: 无法解析的外部符号 "public: static class cocos2d::extension::CCScale9Sprite”fuck,搞笑呢吧。
最后在 eVīLī?ō 的帮助下,解决了这个问题,原来我们没有引入库文件libExtensions.lib。
右键查看项目属性,找到“配置属性”-“连接器”-“输入”在这里我们加上libExtensions.lib这一项。然后保存重新生成。
4.运行会提示错误,因为包含的一些我们没用到,直接忽略最后就可以成功了。
5.如果以后不想手动添加libExtensions.lib的话,还去修改模板文件,在 var strAddDepends = 'libcocos2d.lib opengl32.lib glew32.lib';这里把libExtensions.lib加上即可。