Cocos2d-x 3.4 之 文本輸入之 EditBox,cocos2d-xeditbox
***************************************轉載請註明出處:http://blog.csdn.net/lttree********************************************
上一篇,說了 文本輸入的 CCTextFieldTTF,
這次繼續來弄文本輸入,EditBox
做完CCTextFieldTTF以後,馬上就搞這個EditBox了,
但是,改動有些多,而且好多BUG啊,網上資料也不多,整的我焦頭爛額。。。
先發一些基礎的,具體其他功能,等它完善一些吧。。
一、簡介
同CCTextFieldTTF一樣,看一下 EditBox 的類繼承圖,
這裡說一下,網上的查到的都是下面這樣的,到cocos2d-x 3.0 API為止(應該是中文最高版本),也是這樣的
就是說 EditBox類是由 ControlButton類和IMEDelegate類繼承而來,
在討論 CCTextFieldTTF時就有說過,它就像 動態Label,
那這個,就是動態Button了。
————But
在3.4 api中,它的類繼承圖改變了:
IMEDelegate沒變,這是IME的代理類,但是另一個變成了 Widget 類,這個類查一查就可以發現,它:
就列在這裡,具體東東,自己琢磨吧,
我覺得,就是從2.x到3.x的改變,
要重新整理這個類結構了,所以我在測試這個的時候好痛苦的啊。。
二、操作使用
雖然,BUG有,但是它準系統還是可以用的
1.標頭檔與命名空間:
#include "cocos-ext.h"USING_NS_CC_EXT;
2.建立:
>
* create a edit box with size. * @return An autorelease pointer of EditBox, you don't need to release it only if you retain it again. */ static EditBox* create(const Size& size, Scale9Sprite* normalSprite, Scale9Sprite* pressedSprite = nullptr, Scale9Sprite* disabledSprite = nullptr);
它的各參數:
——size 文字框的大小
——normalSprite 文字框正常的背景
——pressedSprite 文字框被點擊時的背景
——disabledSprite 文字框不可用時的背景
>
* create a edit box with size. * @return An autorelease pointer of EditBox, you don't need to release it only if you retain it again. */ static EditBox* create(const Size& size, const std::string& pNormal9SpriteBg, TextureResType texType = TextureResType::LOCAL);
它的各參數:
——size 文字框的大小
——pNormal9SpriteBg 背景圖片位置
——texType 不知道,也沒查到...希望各位能幫我解答一下
3.預設文本
設定預設文本,不像CCTextFieldTTF,create時必須建立預設文本,這個如果需要需額外自己寫set
/* 預設字型相關 */// 預設文本setPlaceHolder("Name:");// 字型setPlaceholderFontName("Arial");// 顏色setPlaceholderFontColor(Color3B::BLUE);// 大小setPlaceholderFontSize(48);
順便文本的也一樣
setFontName("Marker Felt");setFontColor(Color3B::RED);setFontSize(24);
4.其他一些操作
> 最大輸入限制
setMaxLength(n);
這個我沒有測試過去,在官方API上說:
就是說,可以設定文字框最大文本長度,如果設定這個就等同於開啟了多行輸入,
但是我這裡無法限制長度,而且多行輸入也沒被開啟。。。
>是否可見
setVisible(true/false);
>設定輸入文本的顯示模式
>設定可輸入文本類型
>設定返回時的類型
DEFAULT —— 預設類型
DONE —— "確定"
SEND —— "發送"
SEARCH —— "搜尋"
GO —— "串連"
5. 對於它的委託類
如果建立一個類,想用 CREATE_FUNC
必須要設定它委託類的一些虛函數才可以
—四大金剛—
//開始編輯時virtual void editBoxEditingDidBegin(EditBox* editBox);//結束編輯時virtual void editBoxEditingDidEnd(EditBox* editBox);//編輯框文字改變時virtual void editBoxTextChanged(EditBox* editBox, const std::string& text);//觸發返回後virtual void editBoxReturn(EditBox* editBox);
還有其他的一些東西,查一查API吧~
三、Do it
還是慣例,實踐環節,建立一個 editbox ,設定它的預設字型 與 文本的顏色等
// 螢幕大小Size visibleSize = Director::getInstance()->getVisibleSize(); // 編輯框大小Size boxSize = CCSizeMake(400,200);Size boxSize2 = CCSizeMake(400,100);EditBox* editBox = EditBox::create(boxSize,"green.png");editBox->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));// 預設字型相關editBox->setPlaceHolder("Name:");editBox->setPlaceholderFontName("Arial");editBox->setPlaceholderFontColor(Color3B::BLUE);editBox->setPlaceholderFontSize(32);// 編輯框文本相關editBox->setFontName("Arial");editBox->setFontColor(Color3B::RED);editBox->setFontSize(24);this->addChild(editBox);EditBox* editBox2 = EditBox::create(boxSize2,"yellow.jpg");editBox2->setPosition(Vec2(visibleSize.width/2,visibleSize.height/4));editBox2->setPlaceHolder("Password:");editBox2->setFontName("Arial");editBox2->setPlaceholderFontSize(24);editBox2->setFontSize(48);editBox2->setInputFlag(EditBox::InputFlag::PASSWORD);this->addChild(editBox2);
運行圖片:
可以發現,我們設定的預設字型大小功能沒有起作用。。。
好痛苦,做這個各種鬱悶,資料少,麻煩多。。。
如果本篇文章有任何錯誤,敬請指正
***************************************轉載請註明出處:http://blog.csdn.net/lttree********************************************