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,使用文件夹结构。