直接在cocos2d-x显示中文会乱码的,如CCLableTTF::create("你好世界", "Arial“, 15);需要使用cocos2d-x自带的iconv库,不多说,上代码
//中文显示解决方案
#ifdef WIN32
#define UTEXT(str) GBKToUTF8(str) //这里定义了一个UTEXT的宏,用来转换非UTF8(中文)的str
#else
#define UTEXT(str) str
#endif
#ifdef WIN32
//#include "third_party/win32/iconv/iconv.h"
#include "iconv/iconv.h" //这个路径要根据工程属性设置来设,点击”配置属性->C++->附加库目录“
//我的工程目录里有”$(ProjectDir)..\..\..\cocos2dx\platform\third_party\win32“所以就这么设了
#pragma comment(lib, "libiconv.lib") //这个很重要,别忘了加
static char g_GBKConvUTF8Buf[5000] = {0};
const char* GBKToUTF8(const char *strChar)
{
iconv_t iconvH;
iconvH = iconv_open("utf-8","gb2312");
if (iconvH == 0)
{
return NULL;
}
size_t strLength = strlen(strChar);
size_t outLength = strLength<<2;
size_t copyLength = outLength;
memset(g_GBKConvUTF8Buf, 0, 5000);
char* outbuf = (char*) malloc(outLength);
char* pBuff = outbuf;
memset( outbuf, 0, outLength);
if (-1 == iconv(iconvH, &strChar, &strLength, &outbuf, &outLength))
{
iconv_close(iconvH);
return NULL;
}
memcpy(g_GBKConvUTF8Buf,pBuff,copyLength);
free(pBuff);
iconv_close(iconvH);
return g_GBKConvUTF8Buf;
}
#endif
使用的时候像如下形式即可:
label = CCLabelTTF::create(UTEXT("世界,您好!"), "Arial", 30);
搞定,运行一切正常,真的直想说:自己写代码作项目不用看大牛眼色,只要能把问题解决就行,他们说怎么怎么不行什么不是正规的解决方法其实只是他们的代码习惯而已,不用什么东西非要跟在他们屁股后面。
曾经在一个公司里写一个精灵移动位置这样简单的东西我每帧update设置pos.x = pos.x + xSpeed一个牛B的领导头头非说这不是cocos2d-x的正规解决方案非要逼着我用CCMoveBy和CCMoveTo,结果造成每帧动作叠加造成结果不可控,难后他又不说怎么解决,又不让我用pos.x相加的方法,我无语了,傻眼了,为这么个小问题我从那家公司离职了,后来我自己查了大量别人写的代码,看了很多源码,如泰然教程网里横版格斗动作游戏源码都是在update里设定pos+速度的方法,其实这种精灵移动有两种情况,一种是手指点击某处精灵就移动到哪,这种因为知道精灵的目的地可以用CCMoveTo或CCMoveBy,而另一种类似街机游戏用虚拟摇杆操作的玩家点一下前精灵移动一下那种再用CCMoveBy或CCMoveTo就明显不方便了,如此生搬硬套一刀切还称自己是技术总监,大牛?现在想想操你技术牛逼怎么了,不是也有解决不了问题的时候?做人要有志气,不用佩服一些所谓的高人大牛,谁知道他们是真牛还是只会打嘴炮?