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

标签 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 一直这样说:

从'void (GFXManager::*)(cocos2d::Ref * )'到'cocos2d::SEL_CallFuncO'(又名'void (cocos2d::Ref::*)(cocos2d::Ref *)'的Static_cast )') 是不允许的

我尝试使“GFXManager”成为从“Layer”派生的类(如在 Texture2dTest 中),并使用“CCObject”代替“Ref”(如在 Texture2dTest 中...但是“CCObject”已被弃用,现在它是称为“Ref”),没有运气。

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

最佳答案

您需要使用 std::bindCC_CALLBACK_1 更改 callfuncO_selector:

void GFXManager::loadStuff()  
{  
    std::string path = "whatever.png";    
    Director::getInstance()->getTextureCache()->addImageAsync(path, CC_CALLBACK_1(GFXManager::textureLoaded, this));  
}

因为 TextureCache::addImageAsync 接受 std::function 而不是函数指针

关于c++ - TextureCache::addImageAsync 选择器类型转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28415498/

相关文章:

c++ - 堆内存分析

javascript - 如何防止两个react-native Picker相互影响?

ios - 使用 RestKit 0.20 映射时在 JSON 中向上遍历

android 后退键在我的 cocos2d-x android c++ 游戏中仍然不起作用

c++ - 如何在Cocos2d-x中绘制一段圆?

c++ - 为什么Cocos2d-x第一次不显示 Sprite ?

c++ - 一次性使用类

c++ - 访问保存在 unique_ptr 的多维 vector 中的对象的方法

c++ - 使用 C++ 访问网络摄像头的 FFMPEG

ios - XCUITest:如何跳入应用程序代码?如何修改被测应用程序的状态?