2013-04-16 80 views
0

我有點新來的cocos2d和objective-c一般都這樣對我很好。我的代碼中有一個EXC_BAD_ACCESS錯誤,所以我做了我通常做的事情,並打開NSZombies。這通常會吐出一些有用的東西,但這次什麼都不吐,程序也沒有崩潰。EXC_BAD_ACCESS在cocos2d中

崩潰而來的更新功能在我的敵人類

- (void)update:(ccTime)delta{ 
    speed = SPEED; 
    angleToTargetInRadians = -atan2((self.position.y-target.position.y),(self.position.x-target.position.x)); 

速度第二行期間angleToTargetInRadians是在頭文件中定義兩個雙打。

第4或第5個敵人死亡時發生墜機。

- (void)die { 
//give the player some points 
[((AppController *)[UIApplication sharedApplication].delegate) addScore:POINTVALUE]; 
//make the shattered sprite 
ShatteredSprite * blownUpShip = [ShatteredSprite shatterWithSprite:self piecesX:4 piecesY:4 speed:3 rotation:.02]; 
//add it to the layer 
[self.parent addChild:blownUpShip]; 

//set the position and momentum and scale 
[blownUpShip setVx: Vx]; 
[blownUpShip setVy: Vy]; 
[blownUpShip setScale:self.scale]; 
[blownUpShip setPosition:self.position]; 
[blownUpShip setRotation:self.rotation]; 

//get rid of the old ship 
[self removeSelf]; 
} 

- (void)removeSelf { 
//remove self from array 
NSMutableArray * enemies = [((AppController *)[UIApplication sharedApplication].delegate) Enemies]; 
[enemies removeObject:self]; 

[super die]; 
} 

[超級模]只是

[self removeFromParentAndCleanup:FALSE]; 

任何幫助表示讚賞!謝謝!

+0

任何不調用'[self removeFromParentAndCleanup:YES]的原因;'而不是? – ssantos

+0

@ssantos感謝您的回覆!我剛剛嘗試過,它調用[child setParent:nil]上的另一個不良訪問;在 - (void)detachChild:(CCNode *)子清理:(BOOL)在CCNode.m文件中的doCleanup。 –

+0

ARC還是沒有ARC?你有沒有在Xcode中啓用全局異常斷點(有助於查看實際的違規行)?你應該做清理:是的,因爲這會殺死任何剩餘的行動和敵人的預定選擇器將繼續運行,清理方法也不會被調用。只有一個不清理的原因,那就是當你立即想要重新添加節點到另一個父節點時。 – LearnCocos2D

回答

0

您是否使用在ShatteredSprite範圍內傳遞給ShatteredSprite初始值的船舶物體?

在我看來,你正在做這樣的事情(注意,這只是一個猜測):

  1. 初始化一個新的Sprite爲您的敵艦(可能自動釋放)
  2. 添加此精靈爲孩子的一個節點,變成敵人可變數組
  3. 當船被破壞,你初始化一個新的Sprite(ShatteredSprite與船舶精靈)
  4. 從父節點,並從敵人陣中刪除船精靈 - >在這一次,沒有保留的參與者從而使船準備好被釋放。

因此,你使用你的船精靈ShatteredShip沒有保留它?

您可能會發現Xcode中「產品」菜單中的「分析」工具有用。

相關問題