почему cocos2d-x использует многопоточный загрузочный спрайт с серверов — черный

Я использую ‘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'
}

кто может мне помочь, это беспокоило меня три дня!

0

Решение

Вы не можете просто поток кода, который необходим для доступа к OpenGL. В этом случае: создание спрайта, более конкретно создание текстуры спрайта. Это должно быть сделано в том же потоке, что и контекст OpenGL, который обычно является основным потоком.

Вы можете загружать изображение и сохранять его на устройстве, но вам нужно перенести создание спрайта в основной поток.

2

Другие решения

Вот класс, который поддерживает серверные / удаленные спрайты в cocos2d-x v3

RemoteSprite

0