2012-07-05 1 views
1

J'utilise la fonction particleWithFile() de Coco2D-X, avec un fichier plist créé avec Mac. Les données d'image sont incorporées dans le fichier plist, en utilisant la clé "textureImageData". Avec Mac, il fonctionne très bien, mais avec Windows il échoue, le CCAssert (IsOk), voir le code Coco2D-X ci-dessous (CCParticleSystem.cpp):Ne pas gonfler un png dans un plist avec Windows en utilisant Cocos2D-X

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()); 
} 

Il semble que le décodage passe avec succès, et le problème est à l'intérieur de la fonction inflate() de zlib, ne décompressant pas le fichier png.

Des suggestions?

+1

Vous lancez un tas de termes qui signifient des choses différentes, de sorte que votre code peut être également confondu. "unzip" est différent de "ungzipping" est différent de ce qui est dans un fichier png. Vous ne pouvez pas "décompresser" un fichier png. Les fichiers png contiennent des données zlib. zip, gzip et zlib sont trois formats différents qui sont tous des wrappers différents autour des données brutes compressées par deflate. Vous devez vérifier le format attendu par ccInflateMemory, et assurez-vous que c'est ce que vous lui donnez. –

+0

Désolé de ne pas être un expert, je suppose que c'est pourquoi je pose ici des questions ... Comme je l'ai dit, ce n'est pas mon code, mais le code Cocos2d-x, en utilisant zlib. En "décompressant", je voulais dire "ungziping" le fichier png. Je ne pense pas qu'il y ait quelque chose de mal avec le format, car il gonfle avec succès un autre png intégré. –

Répondre

0

OK, j'ai trouvé le problème.

Apparemment, ma ressource n'était pas un fichier png mais un fichier tiff. Donc Inflate() a retourné un tampon correct (d'un fichier tiff - a semblé trop long pour moi, donc j'ai suspecté qu'il était erroné), mais initWithImageData() n'a pas réussi à créer une image, puisque tiff n'est pas supporté par Cocos2d-x sur windows.

0

je rencontre le problème parce que je mets le CC_USE_TIFF à 0.

Après la récupération du CC_USE_TIFF à 1, le problème résolu.

Questions connexes