创建的精灵显示出来是黑色的方块

我在继承了层的类下的函数里创建精灵并添加到层上面,然后在别的地方调用了这个函数,精灵显示出来大小和形状都对,但是是个纯黑的方块。但如果直接在层上添加精灵就能正确的显示颜色。为什么会有这样的现象啊?

如果是通过Plist文件创建的,可能是Plist文件加载的时机太早了.

不是通过plish创建的,是直接代码创建的

这是C++吗?目测继承没继承好。

是C++, 有用public的方式继承cocos2d::Node,同时也继承了另一个cloud的类。但是异步callback的时候就会显示黑色的图片

单纯从你的描述上也不知道是什么原因·······

顺带说下,手机上的话,如果图片太大也有可能出现精灵是黑色方块的情况(例如iPhone4没法显示2048x2048以上的)

是小图片,我使用App42API来加载图片
class App42Backend : public App42CallBack, public cocos2d::Node{}

然后在App42Backend类下面:
void App42Backend::getTopNRankersFromFacebook(const char *gameName, const char *fbAccessToken, int max){
scoreBoardService->GetTopNRankersFromFacebook(gameName, fbAccessToken, max, this, app42callfuncND_selector(App42Backend::getTopNRankersFromFacebookRequestCompleted));
}

void App42Backend::getTopNRankersFromFacebookRequestCompleted(App42CallBack *sender, void *response){
App42GameResponse scoreResponse = (App42GameResponse)response;
printf("\n\nGet top n rankers by fb");

if (scoreResponse->isSuccess)
{
    vector<App42Score> scores = scoreResponse->scores;
    int i = 0;
    for(std::vector<App42Score>::iterator it = scores.begin(); it != scores.end(); ++it, ++i)
    {
        printf("\n Facebook User Name = %s",it->facebookProfile.getName().c_str());
        printf("\n ScoreValue=%f",it->getScoreValue());
        printf("\n Facebook Id = %s\n",it->facebookProfile.getFbId().c_str());
        
        // check whether loaded the avatar and add it to avatar frame
        std::string avatar = it->facebookProfile.getFbId().c_str();
        avatar += ".png";
        if (cocos2d::FileUtils::getInstance()->isFileExist(cocos2d::FileUtils::getInstance()->getWritablePath().append(avatar.c_str()))){    // already download avatar
            HttpImage::getInstance()->addAvatarToHighScore(avatar.c_str(), i, it->facebookProfile.getName().c_str(), it->getScoreValue());
        }else{           
            HttpImage::getInstance()->downloadImageFromURL(it->facebookProfile.getPicture().c_str(), it->facebookProfile.getFbId().c_str(), i, it->facebookProfile.getName().c_str(), it->getScoreValue());
        }
    }
}

}

如果图片已经下载过了,也就是if (cocos2d::FileUtils::getInstance()->isFileExist(cocos2d::FileUtils::getInstance()->getWritablePath().append(avatar.c_str())))下面,HttpImage::getInstance()->addAvatarToHighScore 是直接使用已下载的图片创建精灵然后加到一个layer上面去,这时候图片是黑色的

但是如果没有找到图片,也就是 else 下面, HttpImage::getInstance()->downloadImageFromURL 是通过cocos2d::Network::HttpRequest 的方法直接下载图片然后在HttpRequest 的 ResponseCallBack里面创建精灵并且加到layer上面,这时候无论HttpImage类有没有继承cocos2dx Node,图片都能显示出来

我也遇到过这种情况,那次失因为不是在主线程加载的图片,图片显示的是黑色块

我这应该也是差不多的问题,App42Backend::getTopNRankersFromFacebookRequestCompleted 应该不是在主线程里面跑的,那怎样才让非主线程加载的图片显示出来呢?

参考下cocos2dx的异步加载资源的方法

什么异步加载资源的方法?可以给段演示代码看看嘛?

只有Renderer Thread才能进行egl调用,因为egl的context是在Renderer Thread创建的,Worker Thread并没有EGL的context,在进行egl操作时,无法找到context,因此操作都是失败的,纹理也就无法显示出来。

http://blog.csdn.net/zmzsoftware/article/details/37656403