2012-10-22 42 views
0

我使用TexturePacker提出了兩套spritesheets中,一個被稱爲objects-0.plist/objects0-pngobjects-0-ipad.plist/objects-0-ipad.png。他們每個人都有以下圖片中它:CCSpriteFrameCache無法正常獲取的圖像與「-iPad」後綴

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

我該如何解決這個問題?任何幫助表示讚賞。

+0

也許你需要在代碼中使用一些if-else。我已經更新到2.0.3,使用文件夾結構。 –

回答

1

想到一個想法,寫了一個問題,我只測試它發送和它的工作。

問題是我直接從文件名中檢索Sprite Frame。意思是,我檢索objects-0-0.pngcocos2d-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

是的,後綴只適用於實際的文件。任何文件中引用的名稱,不僅僅是紋理圖集plists,還包括tilemaps,位圖字體等都不是遵循-hd/-ipad/-ipadhd約定。在這種情況下,框架名稱「object-0.0.png」實際上不應該有一個.png擴展名來澄清,但是,唉,傳統。 – LearnCocos2D

+0

'.png'擴展名是由'.plist'文件中的TexturePacker添加的,所以我只使用這些名稱。 – alxcyl

1

您使用的是什麼版本的cocos2d-x?由於2.0.2版本的後綴不受支持,因此您應該針對不同設備使用目錄來對付文件名中的後綴。您可以看到詳細信息here和cocos2dx示例。

+0

仍在使用2.0.1。因爲我在項目中太過分了,所以我沒打擾升級到2.0.3,我擔心升級可能會導致代碼中的不一致和衝突。 – alxcyl