经历了很多事情,我决定把我学习的经历写下来,用来温故知新,作为学生可能了解知识不那么到位,如果有什么差错,请校正。由于cocos2dx是模仿cocos2d-iPhone,所以里面的代码是偏向于Object C的C++,刚刚开始着手于cocos2dx的时候觉得怪怪的,后来就好多了,今晚突然想写写,就从前几天朋友叫我写输入框还要光标开始吧;
打开cocos2dx 对于学生而言我使用的是2.2.2版本。没有着手于使用3,x 打开cocos2dx的tool, 创建一个新的项目名为 review_1 , cocos2dx自带有输入框的类CCTextFieldTTF,这个类继承CCLabelTTF哦;由于CCTextFieldTTF由cocos2dx封装好了,留出了几个很好使用的接口,若有兴趣去研究cocos2dx底层的源代码欢迎找我一起研究。下面说说这两个常用接口的函数
bool attachWithIME() // 激活输入法
bool detachWithIME() // 取消输入法
光是这个类是不够的,还需要一个代理类CCTextFieldDelegate来协助CCTextFieldTTF;CCTextFieldDelegate类的常用4个接口函数
virtual bool onTextFieldAttchWithIME(TextFieldTTF* sender) // 激活输入框之前调用改函数
virtual bool onTextFieldDetchWithIME(TextFieldTTF* sender); // 取消输入框之前调用改函数
virtual bool onTextFieldInsertText(TextFieldTTF* sender,const char* text, int nlen); // 插入字符的时候调用该函数;
virtual bool onTextFieldDeleteBackward(TextFieldTTF* sender, const char* text int nlen);// 删除字符的时候调用该函数;
好了,让我们使用这些函数来书写我们输入框的篇章吧(鉴于第一次写,代码还是一个一个敲,不复制原来写的代码了)
#ifndef __REVIEW_ONE__
#define __REVIEW_ONE__
#include "cocos2d"
#include "iostream"
using namespace std;
US_NS_CC;
class review_one :public CCLayer
{
public:
static CCScene* scene();
virtual bool init();
CREATE_FUNC(review_one);
void drawCursor(int Curs_h,int Curs_c);// 初始化一个光标
virtual void ccTouchesEnded(CCSet* pTouch,CCEvent* pEvent);
virtual bool TextFieldAttchWithIME();
virtual bool TextFieldDetachWithIME();
virtual bool TextFieldInsertText(CCTextFieldTTF* sender, const char* text, int nlen);// 添加字符时光标移动的实现;
virtual bool TextFieldDeleteBackward(CCTextFieldTTF* sender,const char* text, int nlen);
private:
string input_String;
CCSprite* Curs_Sp;
};
#endif
CPP 文件:
#include "review_one.h"
CCScene* review_one:: scene()
{
CCScene* scene=CCScene::create();
review_one* layer=review_one::create();
scene->addChild(layer);
return scene();
}
bool review_one:: init()
{
if(CCLayer::init())
{
return false;
}
CCSize visibleSize=CCDirector::sharedDirector()->getvisibleSize();
input_String="xiaofei";
CCTextFieldTTF* input=CCTextFieldTTF::textFieldWithPlaceHolder(input_String.c_str(),"arial",60);
input->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));
input->setTag(1);
this->addChild(input);
Curs_Sp->setPosition(ccp(visibelSize.width/2+(textfield->getContentSize().width/2),visibleSize.height));
this->setDelegate(this);
this->drawCursor(50,4);
return true;
}
void review_one:: ccTouchedEnded(CCSet* pTouch,CCEvent* pEvent)
{
CCTextFieldTTF* input_ime=dynamic_cast<CCTextFieldTTF*>(this->getChildByTag(1));
if(!input_ime->attchWithIME())
{
input_ime->attchWithIME();
{
else
input_ime->detchWithIME();
}
void review_one:; drawCursor(int Curs_h,int Curs_c)
{
int **a=new int *[Curs_h];
for(int i=0;i<Curs_h;i++)
{
a[i]=new int [Curs_c]
}
for(int i=0;i<Curs_h,;++)
for(int j=0;j<Curs_c;j++)
{
a[i][j]=0xffffffff;
}
CCTexture2D* curs_tex=new Texture2D();
curs_tex->initWithData(a,kCCTexture2DPixelFormat_RGB888,1,1CCSizeMake(Curs_c,Curs_h));
Curs_Sp=CCSprite::createWithTexture(curs_tex);
this->addChild(Curs_Sp);
CCRepeatForever* forever=CCRepeatForever::create(CCBlink::create(5,5));
Curs_Sp->runAction(forever);
for(int i=0;i<Curs_h;i++)
{
delete[] a[i];
}
delete [] a;
curs_tex->release();
}
bool review_one:: onTextFieldInsertText(CCTextFieldTTF* sender, const char* text, int nlen)
{
CCSize size=CCDirector::shardDirector()->getvisibleSize();
CCTextField* textfield=dynamic_cast<CCTextFieldTTF*>(this->getChildByTag(1));
input_String.append(text);
textfield->setString(input_String.c_str());
Curs_Sp->setPosition(ccp(size.width/2+(textfield->getContentSize().width/2),size.height));
return false;
}
bool review_one:: onTextFieldDeleteBackward(CCTextFieldTTF* sender, const char* text, int nlen)
{
CCSize size=CCDirector::shardDirector()->getvisibleSize();
CCTextField* textfield=dynamic_cast<CCTextFieldTTF*>(this->getChildByTag(1));
input_String.resize(input_String.size()-nlen);
textfield->setString(input_String.c_str());
Curs_Sp->setPosition(ccp(size.width/2+(textfield->getContentSize().width/2),size.height));
if(input_String.empty())
{
Curs_Sp->setPosition(ccp(size.width/2,size.height));
}
}
看看时间,一点多快两点了,就写在这儿把,如果有什么其他好的办法欢迎骚扰 QQ 249435196,欢迎学习交流。如果有借鉴的情况希望也指出来,一定改。 下次在说组件的事情嗯