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

TextureCache::addImageAsync selector typecast issue

我第一次尝试使用 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' 派生的 class(如在 Texture2dTest 中),并使用 'CCObject' 代替 'Ref'(如在Texture2dTest...但是 'CCObject' 已被弃用,现在它被称为 'Ref'),没有运气。

但是我在网络上找到的每个关于使用 addImageAsync 的示例都使用该语法调用选择器。
那我做错了什么?

您需要将 callfuncO_selector 更改为 std::bindCC_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而不是函数指针