我使用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代碼的所有雪碧創作的代碼,這似乎阻止發生錯誤之前,但我真的想弄清楚爲什麼發生這種情況。零星的蟲子讓我非常緊張,直到我找出它們。
您是否嘗試過通過在飛機墜毀前運行的cocos2d代碼加強?可能會提示。 –
@BenTrengrove通過代碼。該錯誤似乎發生在我添加到原始帖子底部的行中。基本上,當它嘗試創建UIImage對象時發生錯誤。 – dqhendricks
該點的完整路徑的價值是什麼?該錯誤行存在於哪裏?我沒有看到你提交的任何代碼文件。 – prototypical