Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cocos2d-x为什么使用来自服务器的多线程加载精灵是黑色的_C++_Cocos2d Iphone_Pthreads - Fatal编程技术网

C++ cocos2d-x为什么使用来自服务器的多线程加载精灵是黑色的

C++ cocos2d-x为什么使用来自服务器的多线程加载精灵是黑色的,c++,cocos2d-iphone,pthreads,C++,Cocos2d Iphone,Pthreads,我使用“pthread”创建一个新线程。它从服务器加载精灵。但是,雪碧是黑色的 class Test: public CCLayer { public: Test(); ~Test(); virtual bool init(); ... private: pthread_t _tid; static void* _loadSprite(void*); void _doSth(); CCSprite* _loadSpriteFromS

我使用“pthread”创建一个新线程。它从服务器加载精灵。但是,雪碧是黑色的

class Test: public CCLayer
{
public:
    Test();
    ~Test();
    virtual bool init();
    ...
private:
    pthread_t _tid;
    static void* _loadSprite(void*);
    void _doSth();
    CCSprite* _loadSpriteFromServer(); // load sprite from server.
};

void* Test::_loadSprite(void* param)
{
    Test* pThis = (Test*)param;
    pThis->_doSth();
    return NULL;
}
bool Test::init()
{
    pthread_create(&_tid, NULL, _loadSprite, this);
}
void Test::_doSth()
{
    CCSprite* pSprite = _loadSpriteFromServer();
    addSprite(pSprite); // the sprite is 'black'
}

谁能帮我,这困扰了我三天

您不能只线程化需要访问OpenGL的代码。在本例中:创建精灵,更具体地说,创建精灵的纹理。这需要在与OpenGL上下文相同的线程上完成,OpenGL上下文通常是主线程


您可以通过线程加载图像并将其保存在设备上,但您必须将创建精灵移动到主线程。

这里有一个类支持cocos2d-x v3中的服务器端/远程精灵