FC2ブログ

がおまる開発ブログ

cocos2d-xやlevelhelperを使って iPhone/Androidアプリの作り方を解説します

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CCEditBoxで入力した文字数を取得する

CCEditBoxを使って、入力した文字数を取得しようとした時にえらいハマったので、
備忘録として残しておきます。


#include <iostream>
#include "cocos2d.h"
#include "cocos-ext.h"

class InputLayer: public cocos2d::CCLayer, public cocos2d::extension::CCEditBoxDelegate {
public:
InputLayer();
~InputLayer();

static cocos2d::CCScene* scene();
virtual void editBoxEditingDidBegin(cocos2d::extension::CCEditBox* editBox);
virtual void editBoxEditingDidEnd(cocos2d::extension::CCEditBox* editBox);
virtual void editBoxTextChanged(cocos2d::extension::CCEditBox* editBox, const std::string& text);
virtual void editBoxReturn(cocos2d::extension::CCEditBox* editBox);


private:
cocos2d::extension::CCEditBox* m_pEditName;
int wlen(const char *str);
};



#include "InputLayer.h"

using namespace cocos2d;
using namespace extension;

////////////////////////////////////////////////////////////////////////////////
InputLayer::InputLayer()
{
CCSize visibleSize = CCEGLView::sharedOpenGLView()->getVisibleSize();
CCSize editBoxSize = CCSizeMake(visibleSize.width - 30, 30);
CCSize s = CCDirector::sharedDirector()->getWinSize();

m_pEditName = CCEditBox::create(editBoxSize, CCScale9Sprite::create("edit.png"));
m_pEditName->setPosition(ccp(s.width/2, s.height/2));
m_pEditName->setFontColor(ccRED);
m_pEditName->setPlaceHolder("入力してね");
m_pEditName->setMaxLength(15);
m_pEditName->setReturnType(kKeyboardReturnTypeDone);
m_pEditName->setDelegate(this);
addChild(m_pEditName);

}

////////////////////////////////////////////////////////////////////////////////
void InputLayer::editBoxEditingDidBegin(cocos2d::extension::CCEditBox* editBox)
{
}

////////////////////////////////////////////////////////////////////////////////
void InputLayer::editBoxEditingDidEnd(cocos2d::extension::CCEditBox* editBox)
{
}

////////////////////////////////////////////////////////////////////////////////
void InputLayer::editBoxTextChanged(cocos2d::extension::CCEditBox* editBox, const std::string& text)
{
int cnt = this->wlen(text.c_str());
CCLog("文字数=%d", cnt);
}

////////////////////////////////////////////////////////////////////////////////
void InputLayer::editBoxReturn(CCEditBox* editBox)
{
}

////////////////////////////////////////////////////////////////////////////////
// 文字数取得
int InputLayer::wlen(const char *buff)
{
if( buff == NULL ) return 0;

int count = 0;
int pos = 0;
int max_bytes = strlen( buff );

// BOM 読み飛ばし
if( max_bytes >= 3 )
{
if( static_cast<unsigned char>( buff[0] ) == 0xEF &&
static_cast<unsigned char>( buff[1] ) == 0xBB &&
static_cast<unsigned char>( buff[2] ) == 0xBF )
{
pos += 3;
}
}

while( pos < max_bytes )
{
++count; // 文字数カウント

if( ( buff[pos] & 0x80 ) == 0 )
{
++pos; // 1バイト文字
}
else
{
for( char tmp = buff[pos] & 0xfc; (tmp & 0x80); tmp = tmp << 1 )
{
++pos; // 複数バイト文字
}
}
}
return count;
}
////////////////////////////////////////////////////////////////////////////////
InputLayer::~InputLayer() {
}

////////////////////////////////////////////////////////////////////////////////
CCScene* InputLayer::scene()
{
// 'scene' is an autorelease object
CCScene *scene = CCScene::create();

// add layer as a child to scene
InputLayer* layer = new InputLayer();
scene->addChild(layer);
layer->release();

return scene;
}

スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://gaomar.blog.fc2.com/tb.php/71-45f9b9e0
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。