2013-01-09 29 views
4

我使用Objective-C和cocos2d的,和組合的看似無關兩段代碼時我正在奇怪的錯誤。奇怪的錯誤:CGImageProviderCreate:無效圖像提供尺寸:55×36

在一個層的初始化的可疑代碼。

/* sprite setup */ 

CCSprite *sprite = [ [ [ StaticSprite alloc ] initWithSheetName: @"001-Fighter01" atPosition: ccp(200, 200) withColumn: 0 withRow: 1 ] autorelease ]; 
[ map.spriteLayer addChild: sprite ]; 
CCSprite *sprite2 = [ [ [ StaticSprite alloc ] initWithSheetName: @"001-Fighter01" atPosition: ccp(250, 200) withColumn: 0 withRow: 1 ] autorelease ]; 
[ map.spriteLayer addChild: sprite2 ]; 
CCSprite *sprite3 = [ [ [ StaticSprite alloc ] initWithSheetName: @"001-Fighter01" atPosition: ccp(200, 250) withColumn: 0 withRow: 1 ] autorelease ]; 
[ map.spriteLayer addChild: sprite3 ]; 

/* ui setup */ 

// dpad 
dPadUI = [ DPad node ]; 
[ self addChild: dPadUI ]; 

DPad的創建給出錯誤CGImageProviderCreate: invalid image provider size: 55 x 36,這會導致崩潰。奇怪的部分是,如果我刪除sprite setup代碼,DPad代碼工作正常,並且如果我刪除了DPad代碼,則精靈代碼可以正常工作,但是當兩者都存在時,我會收到錯誤消息。

StaticSprite是CCSprite類的相當簡單的擴展:

@implementation StaticSprite 

- (id) initWithSheetName: (NSString *) sheetName atPosition: (CGPoint) initPosition withColumn: (int) column withRow: (int) row { 

    // setup frames 
    [ [ CCSpriteFrameCache sharedSpriteFrameCache ] addSpriteFramesWithFile: [ NSString stringWithFormat: @"%@.plist", sheetName ] ]; 

    if (self = [ super initWithSpriteFrameName:[ NSString stringWithFormat: @"%@-%d,%d.png", sheetName, column, row ] ]) { 

     int halfSize = [ Geometry spriteHalfSizeFromRect: [ self boundingBox ] ]; 
     self.anchorPoint = ccp(.5, halfSize/[ self boundingBox ].size.height); 

     self.position = initPosition; 
     self.zOrder = -self.position.y; 
    } 

    return self; 
} 

@end 

DPAD也是CCSprite的一個相當簡單的擴展:

@implementation DPad 

- (id) init { 
    if (self = [ super initWithFile: @"dPad.png" ]) { 
     self.anchorPoint = ccp(18/[ self boundingBox ].size.width, .5); 
     self.visible = false; 
     self.blendFunc = (ccBlendFunc) { GL_SRC_ALPHA, GL_ONE }; 
     self.opacity = 64; 
    } 
    return self; 
} 

- (void) activateWithDirection: (double) angle { 
    self.visible = true; 
    [ self setRotation: CC_RADIANS_TO_DEGREES(-angle) ]; 
} 

- (void) deactivate { 
    self.visible = false; 
} 

@end 

我似乎能夠添加儘可能多的靜態精靈與不同的圖像沒有問題,並且DPad圖像非常小。爲什麼這兩個代碼段會獨立工作,但是當它們在同一個應用程序中時,它們會導致奇怪的錯誤?

我已經嘗試了包括重命名DPad init方法到initDefault

編輯

我通過cocos2d的代碼階梯,發現錯誤就在這裏發生。出錯後,image變爲零。

UIImage *image = [[UIImage alloc] initWithContentsOfFile:fullpath]; 

我知道它正在查找圖像,因爲它在日誌中的錯誤中打印出圖像的大小。我似乎無法找到任何在Google上看到此錯誤消息的人。

目前我解決此bug的工作通過將DPAD代碼的所有雪碧創作的代碼,這似乎阻止發生錯誤之前,但我真的想弄清楚爲什麼發生這種情況。零星的蟲子讓我非常緊張,直到我找出它們。

+0

您是否嘗試過通過在飛機墜毀前運行的cocos2d代碼加強?可能會提示。 –

+0

@BenTrengrove通過代碼。該錯誤似乎發生在我添加到原始帖子底部的行中。基本上,當它嘗試創建UIImage對象時發生錯誤。 – dqhendricks

+0

該點的完整路徑的價值是什麼?該錯誤行存在於哪裏?我沒有看到你提交的任何代碼文件。 – prototypical

回答

3

哇,所以這是一個奇怪的一個。在我的代碼中,我有max而不是MAX,這導致了我的代碼中所有類型的破壞。在過去的幾天裏,我一直感嘆的三個不明原因的錯誤在這一次變化之後都消失了。出於某種原因,在我的代碼中使用max導致所有內容都由此導致floatValue返回nil無法解釋,導致向數組添加對象會導致無法解釋的錯誤訪問錯誤。

感謝所有幫助。

+0

如果這解決了我遇到的問題,那麼我會...我甚至不知道。無論如何,我有我的.pch靜態NSInteger maxNumberOfEmoji = 8;'現在要改變它。 – Fogmeister

1

這是一個長鏡頭,但我懷疑的Xcode「認爲」在錯誤的文件名位於別的地方。我會建議嘗試刪除當前的圖片,並用你還沒用過的新名稱(testMeNow.jpg)將它們重新複製到你的項目中並給它一個鏡頭。

+0

似乎不太可能,因爲它似乎已經發現它足夠好,知道它是多大,但我會給它一個鏡頭。 – dqhendricks

+0

在xcode中有很多不太可能的錯誤:)不會傷害嘗試。 – Segev