我第一次尝试使用addImageAsync,但我无法使语法正常工作。我正在使用Cocos2dx 3.3 final和Xcode 6.1.1。 我的代码如下:
(GFXManager.h)
#include "cocos2d.h"
class GFXManager
{
...
void loadStuff();
void textureLoaded(Ref* pObj);
}
(GFXManager.cpp)
...
void GFXManager::loadStuff()
{
std::string path = "whatever.png";
Director::getInstance()->getTextureCache()->addImageAsync(path, callfuncO_selector(GFXManager::textureLoaded));
}
void GFXManager::textureLoaded(Ref* pObj)
{
...
}
以上是基于Cocos2dx的“Texture2dTest”样本。 但是在使用addImageAsync指令的行中,Xcode一直这样说:
Static_cast从'void(GFXManager :: *)(cocos2d :: Ref *)'到'cocos2d :: SEL_CallFuncO'(又名'void(cocos2d :: Ref :: *)(cocos2d :: Ref *) )')不允许
我尝试使'GFXManager'成为一个派生自'Layer'的类(如在Texture2dTest中),并使用'CCObject'代替'Ref'(如在Texture2dTest中......但'CCObject'已被弃用,现在它已经过时了叫做“Ref”),没有运气。
但是我在网上发现的每个使用addImageAsync的例子都会用这种语法调用选择器 我做错了什么?
答案 0 :(得分:1)
您需要使用callfuncO_selector
或std::bind
更改CC_CALLBACK_1
:
void GFXManager::loadStuff()
{
std::string path = "whatever.png";
Director::getInstance()->getTextureCache()->addImageAsync(path, CC_CALLBACK_1(GFXManager::textureLoaded, this));
}
因为TextureCache :: addImageAsync接受std::function
而不接受函数指针