TextureCache :: addImageAsync选择器类型转换问题

时间:2015-02-09 17:19:34

标签: c++ ios cocos2d-x

我第一次尝试使用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的例子都会用这种语法调用选择器 我做错了什么?

1 个答案:

答案 0 :(得分:1)

您需要使用callfuncO_selectorstd::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而不接受函数指针