1

Macで作成したplistファイルを使って、Coco2D-XのparticleWithFile()関数を実行しています。画像データは、「textureImageData」キーを使用して plist ファイルに埋め込まれます。Mac では正常に動作しますが、Windows では CCAssert(isOK) で失敗します。以下の Coco2D-X コード (CCParticleSystem.cpp) を参照してください。

char *textureData = (char*)valueForKey("textureImageData", dictionary);
CCAssert(textureData, "");

int dataLen = strlen(textureData);
if(dataLen != 0) 
{
    // if it fails, try to get it from the base64-gzipped data  
    int decodeLen = base64Decode((unsigned char*)textureData, (unsigned int)dataLen,          &buffer);
    CCAssert( buffer != NULL, "CCParticleSystem: error decoding textureImageData");
    CC_BREAK_IF(!buffer);

    int deflatedLen = ZipUtils::ccInflateMemory(buffer, decodeLen, &deflated);
    CCAssert( deflated != NULL, "CCParticleSystem: error ungzipping textureImageData");
    CC_BREAK_IF(!deflated);

    image = new CCImage();
    bool isOK = image->initWithImageData(deflated, deflatedLen);
    CCAssert(isOK, "CCParticleSystem: error init image with Data");
    CC_BREAK_IF(!isOK);
    m_pTexture = CCTextureCache::sharedTextureCache()->addUIImage(image, fullpath.c_str());
}

デコードは成功したようですが、問題は zlib の inflate() 関数内にあり、png ファイルの解凍に失敗しています。

助言がありますか?

4

2 に答える 2

0

CC_USE_TIFF を 0 に設定したため、この問題が発生しました。

CC_USE_TIFF を 1 に戻すと、問題は解決しました。

于 2015-07-25T07:12:09.880 に答える
0

OK、問題が見つかりました。

どうやら私のリソースはpngファイルではなく、tiffファイルでした。そのため、Inflate() は (tiff ファイルの) 正しいバッファーを返しました (私には長すぎるように見えたので、間違っているのではないかと疑っていました) が、Windows 上の Cocos2d-x では tiff がサポートされていないため、initWithImageData() はイメージの作成に失敗しました。

于 2012-07-08T13:39:07.623 に答える