0

我使用“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'
}

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

4

2 回答 2

2

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

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

于 2013-02-21T09:45:11.870 回答
0

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

远程精灵

于 2015-02-23T09:17:12.570 回答