【问题标题】:TextureCache::addImageAsync selector typecast issueTextureCache::addImageAsync 选择器类型转换问题
【发布时间】:2015-02-09 17:19:34
【问题描述】:

我第一次尝试使用 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 的示例都使用该语法调用选择器。
那我做错了什么?

【问题讨论】:

    标签: c++ ios cocos2d-x


    【解决方案1】:

    您需要将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 而不是函数指针

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 2015-03-06
      • 2019-08-13
      相关资源
      最近更新 更多