Woods Lin How to use textureForKey ? ( Bug ? )
Posts 5
Added by Woods Lin over 1 year ago

A question about textureForKey.
Question code :

CCImage *img = new CCImage;

img->initWithImageData( rawData, width*height, CCImage::kFmtRawData, width, height );

CCTexture2D* tex = CCTextureCache::sharedTextureCache()->addUIImage( img, "catImage" );

if( CCTextureCache::sharedTextureCache()->textureForKey( "catImage" ) ) {

// find

}
else {

// oh...no

// it run here

}

textureForKey don't find "catImage".
maybe I use way is wrong ?

Thank you.

Bin Zhang RE: How to use textureForKey ? ( Bug ? )
Posts 62
Added by Bin Zhang over 1 year ago

Thanks for your feedback!
Yes, it's a bug of engine! Issue #750 created for it.

The reason of this bug had been discussed in this topic:
http://www.cocos2d-x.org/boards/6/topics/2653?r=2982#message-2982

And we only can fix this bug by modify the key with method CCFileUtil::fullPathFromRelativePath() when CCTextureCache::addUIImage() invoked.

Best wishes!

Minggo Zhang RE: How to use textureForKey ? ( Bug ? )
Posts 1641
Added by Minggo Zhang over 1 year ago

Yes.
Woods Lin, you can add CCFileUtil::fullPathFromRelativePath() in CCTextureCache::addUIImage(), and do a test.
Share the result is better.

Woods Lin RE: How to use textureForKey ? ( Bug ? )
Posts 5
Added by Woods Lin over 1 year ago

thanks for help me.

And test is ok, I can get the CCTexture2D object.
but the way isn't my think result.

because I own one file call "imageObject.data",then it own many images in the data.

so I do:

// save the memory

loadImageFile( "imageObject.data" );

// get image from 0 index

BYTE *rawData = getImageFromIndex( 0 );

CCImage *img->initWithImageData( rawData, width*height, CCImage::kFmtRawData, width, height );

CCTexture2D* tex = CCTextureCache::sharedTextureCache()->addUIImage( img, "imageName_1" );

// get image from 1 index

BYTE *rawData2 = getImageFromIndex( 1 );

CCImage *img2->initWithImageData( rawData2, width*height, CCImage::kFmtRawData, width, height );

CCTexture2D* tex = CCTextureCache::sharedTextureCache()->addUIImage( img2, "imageName_2" );

but now "imageName_1" and "imageName_2" can't so use, i must name it call "imageObject.data".
because these images separated to memory address, then they don't have separated to many files in the hard disc.

May give me some suggestions?

thanks.


(1-3/3)