c++ - CCSpriteFrameCache 无法正确检索后缀为 '-ipad' 的图像

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

我使用 TexturePacker 制作了两套 spritesheet,一套叫做 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" );
}

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

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

我该如何解决这个问题?感谢您的帮助。

最佳答案

在写问题时想到了一个想法,我只在它发送并且有效时进行了测试。

问题是我直接从文件名中检索 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

关于c++ - CCSpriteFrameCache 无法正确检索后缀为 '-ipad' 的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13015127/

相关文章:

ios - Cocos2d : how to share player data between scenes

c# - 在 C# 或 C++ 上从 Internet 获取和解析网页

c++ - 命名管道,选择错误的文件描述符 C++

c++ - 由于 Qt moc,在头文件中包含头文件

ios - 自定义CollectionView使iOS崩溃

iphone - 没有使用 ASIHTTPRequest 发送请求信息

ios - 如何在cocos2d中添加iPhone5支持

c++ - 获取和设置内部数据 : return type, 错误情况下的行为

iphone - 如何防止 JSONKit 从 ASP.NET JSON 日期格式转义反斜杠?

iphone - 来自另一层cocos2d的ccmenuitem