0

总的来说,我对 cocos2d 和 Objective-c 有点陌生,所以请多多包涵。我的代码中有一个 EXC_BAD_ACCESS 错误,所以我做了我通常做的事情,并打开了 NSZombies。这通常会吐出一些有用的东西,但这次什么也没吐出,程序也没有崩溃。

崩溃发生在我的敌人类中更新功能的第二行

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

speed 和 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];

任何帮助表示赞赏!谢谢!

4

1 回答 1

0

ShatteredSprite您是否使用传递给初始化器的 ship 对象ShatteredSprite

在我看来,您正在做这样的事情(请注意,这只是一个猜测):

  1. 为你的敌舰初始化一个新的 Sprite(可能是自动释放的)
  2. 将此精灵作为子节点添加到节点并添加到敌人可变数组中
  3. 当船被摧毁时,你初始化一个新的精灵(ShatteredSprite用船精灵)
  4. 从父节点和敌人数组中删除船精灵 --> 此时,没有保留的引用,因此船已准备好释放。

ShatteredShip因此,您是否在不保留它的情况下使用您的船精灵?

您可能会从 Xcode 的 Product 菜单中找到对分析工具有用的东西。

于 2013-04-17T04:41:30.390 回答