C++ CCSpriteFrameCache无法正确检索带有'-ipad&x27;后缀

C++ CCSpriteFrameCache无法正确检索带有'-ipad&x27;后缀,c++,ios,cocos2d-iphone,cocos2d-x,C++,Ios,Cocos2d Iphone,Cocos2d X,我用TexturePacker制作了两套精灵表,一套叫做objects-0.plist/objects0-png和objects-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 // obj

我用
TexturePacker
制作了两套精灵表,一套叫做
objects-0.plist
/
objects0-png
objects-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::createWithPriteFrameName()
抛出一个
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帧。也就是说,我正在检索
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

您使用的是什么版本的cocos2d-x?由于2.0.2版本后缀不受支持,您应该针对文件名中的后缀使用不同设备的目录。您可以在cocos2dx示例中看到详细信息。

是的,后缀仅用于实际文件。任何文件中引用的名称,不仅是纹理贴图集plists,还有tilemaps、位图字体等,都不遵循-hd/-ipad/-ipadhd约定。在本例中,帧名称“object-0.0.png”实际上不应该有.png扩展名来澄清这一点,但遗憾的是,传统也是如此。扩展名
.png
是由TexturePacker在
.plist
文件中添加的,所以我只使用了这些名称。仍然使用2.0.1。我没有更新到2.0.3,因为我在项目中的位置太低了,我担心升级可能会导致代码中的不一致和冲突。也许你需要在代码中使用一些if-else。我已经更新到2.0.3,使用文件夹结构。