在做cocos2d-x的小游戏时需要把char*类型的字符串,强制转化为void*指针类型,透过CCCallFuncND的传递给回调函数。
发现这样是可以的:
//(a)透过双引号中的字符串创建
Enemy *enemy = Enemy::create(this,"enemy/enemy2R.png");
...
//(b)初始化
_bornAction = CCSequence::create(CCAnimate::create(blastAnimation),
CCCallFuncND::create(this, callfuncND_selector(Tank::bornCallback), (void*)fileName),
NULL);
...
//(c)回调函数
char *str = (char*)data;
以上的方法是可以的。但是如果把(a)时的字符串换为如下:
char str[64] = {0};
sprintf(str,"enemy/enemy%dR.png",random);
Enemy *enemy = Enemy::create(this,str);
如果是以上这样操作,则在回调函数时得到的将是空的数据(具体原因不明,大牛勿喷)。
可以透过先把char*转换为std::string*再转换为void*,回调函数时得到的将是正常数据。如下:
_bornAction = CCSequence::create(CCAnimate::create(blastAnimation),
CCCallFuncND::create(this, callfuncND_selector(Tank::bornCallback), (void*)(new std::string(fileName))),
NULL);
...
//Callback
std::string* str = ((std::string*)data)->c_str();
这样的转换后得到的数据将是正常的。具体不知道什么原因,猜可能是char[]、char*、"abc"之间有一定区别。
最后给自己写的小游戏打下广告,一个释放你压力的小游戏,一个你敢叫它敢动的小游戏。敢不敢来试下?
点击下载,或在 Google Play Store 搜索 Make a Noise