Cocos 2 d-x 3.4のテキスト入力のCCTextFieldTTF


出典を明記してください.http://blog.csdn.net/lttree********************************************
本文は主にテキスト入力の東東を述べる.
これの役割は言うまでもなく、やはり重要です.
cocos 2 d-xエンジンはテキスト入力に対して2つのクラスが実現でき、
一つは、CCTextFieldTTF
もう一つはCCEditBoxです
本文は主に最初のCCTextFieldTTFについて述べ,テキスト入力<2>のときにCCEditBoxについて述べる.
一、紹介
このクラスでは、3.4 APIの継承図はソース紫です.
Cocos2d-x 3.4 之 文本输入之 CCTextFieldTTF_第1张图片
このクラスはLabelとIMEDelegate(サブクラスに仮想キーボード機能を提供する)から継承されていることがわかります.
入力された文字を傍受することで時々更新されるLabelという説もある.
二、関連操作
1.作成
ここでの作成はcreateではありませんが、2つの方法があります.
1つ目は、テキストボックスのサイズ、配置方法を自分で定義することです.
/** creates a TextFieldTTF from a fontname, alignment, dimension and font size */
    static TextFieldTTF * textFieldWithPlaceHolder(const std::string& placeholder, const Size& dimensions, TextHAlignment alignment, const std::string& fontName, float fontSize);

パラメータは次のとおりです.
placeholderテキストボックスのデフォルト内容(文字がない場合の内容)
dimensionsテキストボックスサイズ
alignmentテキストボックスの内容の配置方法
fontNameテキストボックスに使用されるフォント
fontSizeテキストボックスフォントサイズ
PS:TextHAlignmentについて
enum class CC_DLL TextHAlignment
{
    LEFT,
    CENTER,
    RIGHT
};

2つ目は、フォントの種類、サイズ、デフォルトの内容のみを定義し、サイズはLabelサイズに等しく、内容が編集ボックスサイズを超えると自動的に拡張されます.
/** creates a TextFieldTTF from a fontname and font size */
static TextFieldTTF * textFieldWithPlaceHolder(const std::string& placeholder, const std::string& fontName, float fontSize);

パラメータは上の意味と同じで、書きません.
2.その他の操作
<1>テキストボックスのデフォルト内容、デフォルト内容のフォント色の設定
//   /          
virtual void setPlaceHolder(const std::string& text);
virtual const std::string& getPlaceHolder() const;
//   /            
virtual const Color4B& getColorSpaceHolder();

virtual void setColorSpaceHolder(const Color3B& color);
virtual void setColorSpaceHolder(const Color4B& color);

<2>編集ボックスの内容
//   /        
virtual void setString(const std::string& text) override;
virtual const std::string& getString() const override;
//           
virtual void setTextColor(const Color4B& textColor) override;

<3>仮想キーボード
//        
virtual bool attachWithIME();
//       
virtual bool detachWithIME(); 

<4>パスワード
//         ,         * ,       *,     3 *
textEdit->setSecureTextEntry(true);

<5>文字数
//             
inline int getCharCount() const { return _charCount; };

他の操作については、自分でAPIを見てみましょう.
ここではこれ以上述べない
三、Doit
小さな例を示しましょう
テキスト・ボックスの作成
//      1
textEdit = CCTextFieldTTF::textFieldWithPlaceHolder("Please input:","Arial", 36);  
textEdit->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));  
textEdit->setColorSpaceHolder(Color3B::BLUE);
this->addChild(textEdit);  

4つのボタンを設定し、テキストボックスを操作します.
//     ——     
auto btn_psw = MenuItemFont::create("password",CC_CALLBACK_1(TextInput::menupswCallback,this));  
btn_psw->setPosition(Vec2(btn_psw->getContentSize().width,visibleSize.height/4)); 
	
//     ——        
auto btn_show = MenuItemFont::create("show",CC_CALLBACK_1(TextInput::menushowCallback,this));
btn_show->setPosition(Vec2(btn_psw->getContentSize().width*2,visibleSize.height/4));

//     ——          
auto btn_count = MenuItemFont::create("count",CC_CALLBACK_1(TextInput::menucountCallback,this));
btn_count->setPosition(Vec2(btn_psw->getContentSize().width,visibleSize.height/6));

//     ——          
auto btn_color = MenuItemFont::create("color",CC_CALLBACK_1(TextInput::menuchangeColorCallback,this));
btn_color->setPosition(Vec2(btn_psw->getContentSize().width*2,visibleSize.height/6));

対応する関数の設定:
//     
bool TextInput::onTouchBegan(CCTouch* touch, CCEvent* ev)  
{  
    //             
    bool isClicked = textEdit->boundingBox().containsPoint(touch->getLocation());  

    //         
	if( isClicked )  
    {  
        //       
        textEdit->attachWithIME();  
    }
	else
	{
		textEdit->detachWithIME();
	}

    //          
    return true;  
} 

//            
void TextInput::menupswCallback(cocos2d::Ref* pSender)
{
	if( textEdit->isSecureTextEntry() )
	{
		textEdit->setSecureTextEntry(false);
	}
	else
	{
		textEdit->setSecureTextEntry(true);
	}
}

//        
void TextInput::menushowCallback(cocos2d::Ref* pSender)
{
	auto label = (Label*) this->getChildByTag(111);
	label->setString(textEdit->getString());
}

//            
void TextInput::menucountCallback(cocos2d::Ref* pSender)
{
	auto label = (Label*) this->getChildByTag(112);
	label->setString( StringUtils::format(" %d ",textEdit->getCharCount()) );
}

//          
void TextInput::menuchangeColorCallback(cocos2d::Ref* pSender)
{
	textEdit->setColor(Color3B::GREEN);
}

Ok、ちょっと動いて(インタフェースがちょっとスラグですね..小さなテスト、これらの細部を気にしないでください..)
Cocos2d-x 3.4 之 文本输入之 CCTextFieldTTF_第2张图片
CCTextFieldTTFについてはここまでですが、
テスト例のすべての内容はこれらだけではありません.
一部の内容は書かれていませんが、
完全版テスト内容->こちら
出典を明記してください.http://blog.csdn.net/lttree********************************************