Cocos2d-x 3.4 之 文本輸入之 EditBox,cocos2d-xeditbox

來源:互聯網
上載者:User

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********************************************

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.