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'
}

誰が私を助けることができますか、これは私を3日間悩ませました!

4

2 に答える 2

2

OpenGL にアクセスする必要があるコードだけをスレッド化することはできません。この場合: スプライトの作成、より具体的にはスプライトのテクスチャの作成。これは、通常はメイン スレッドである OpenGL コンテキストと同じスレッドで実行する必要があります。

画像をスレッドでロードしてデバイスに保存することはできますが、スプライトの作成をメインスレッドに移動する必要があります。

于 2013-02-21T09:45:11.870 に答える
0

これは、cocos2d-x v3 でサーバー サイド/リモート スプライトをサポートするクラスです。

リモートスプライト

于 2015-02-23T09:17:12.570 に答える