CCSpriteFrameCache无法正确检索带有“-ipad”后缀的图像

时间:2012-10-22 15:54:56

标签: c++ ios cocos2d-iphone cocos2d-x

我使用TexturePacker制作了两组精灵表,其中一组称为objects-0.plist / objects0-pngobjects-0-ipad.plist / objects-0-ipad.png。他们每个人都有以下图像:

// objects-0.plist / objects-0.png
object-0-0.png : 50x50 PNG file
object-0-1.png : 50x50 PNG file
object-0-2.png : 50x50 PNG file

// objects-0-ipad.plist / objects-0-ipad.png
object-0-0-ipad.png : 100x100 PNG file
object-0-1-ipad.png : 100x100 PNG file
object-0-2-ipad.png : 100x100 PNG file

我已将这些加载到CCSpriteFrameCache中,如此:

bool AnimTest::init( ) {
    if ( !CCLayer::init( ) ) return false;

    CCSpriteFrameCache::sharedSpriteFrameCache( ) -> addSpriteFrameWithFile( "objects-0.plist" );
}

然后,我尝试使用CCSprite文件中的一个文件制作.plist对象。

bool AnimTest::init( ) {
    if ( !CCLayer::init( ) ) return false;

    CCSpriteFrameCache::sharedSpriteFrameCache( ) -> addSpriteFrameWithFile( "objects-0.plist" );

    CCSprite * testSprite = CCSprite::createWithSpriteFrameName( "object-0-0.png" );
    this -> addChild( testSprite );

    return true;
}

如果我从iPod / iPhone运行这个,它可以正常工作。但是,如果我从iPad运行此操作,CCSprite::createWithSpriteFrameName( )会抛出assert,说文件名无效。

但是,如果我明确使用带有-ipad后缀的文件,它可以正常工作,没有错误,应该这样。

bool AnimTest::init( ) {
    if ( !CCLayer::init( ) ) return false;

    CCSpriteFrameCache::sharedSpriteFrameCache( ) -> addSpriteFrameWithFile( "objects-0-ipad.plist" );

    CCSprite * testSprite = CCSprite::createWithSpriteFrameName( "object-0-0-ipad.png" );
    this -> addChild( testSprite );

    return true;
}

我该如何解决这个问题?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

想到一个想法,同时写下我在测试发送时才测试过的问题。

问题是我正在直接从文件名中检索Sprite Frame。这意味着,我正在检索objects-0-0.png并且cocos2d-x不会自动使用后缀版本。因此,知道这一点,我重新制作/重新编写了.plist文件,以便两个文件(一个带有后缀和一个没有后缀)具有相同的图像文件名,但是完全不同的图像。 .plist文件和.png spritesheets留有后缀。

而不是:

// objects-0.plist / objects-0.png
object-0-0.png : 50x50 PNG file
object-0-1.png : 50x50 PNG file
object-0-2.png : 50x50 PNG file

// objects-0-ipad.plist / objects-0-ipad.png
object-0-0-ipad.png : 100x100 PNG file
object-0-1-ipad.png : 100x100 PNG file
object-0-2-ipad.png : 100x100 PNG file

.plist内的所有文件重命名为不使用后缀的文件。

// objects-0.plist / objects-0.png
object-0-0.png : 50x50 PNG file
object-0-1.png : 50x50 PNG file
object-0-2.png : 50x50 PNG file

// objects-0-ipad.plist / objects-0-ipad.png
object-0-0.png : 100x100 PNG file
object-0-1.png : 100x100 PNG file
object-0-2.png : 100x100 PNG file

答案 1 :(得分:1)

您使用的是哪种版本的cocos2d-x?由于不支持2.0.2版本后缀,因此您应该将不同设备的目录用于文件名中的后缀。您可以在cocos2dx示例中查看详细信息here