1

我正在制作一个游戏,其中玩家上到出口并被传送到下一个级别。当我编译项目时,我收到消息:EXC_BAD_ACCESS (code = 2, address = 0x791)

我使用此代码来设置出口:

_exit = [CCSprite spriteWithSpriteFrameName:@"exit.png"];
    CGPoint exitTileCoord = ccp(908, 980);
    CGPoint exitTilePos = [self positionForTileCoord:exitTileCoord];
    _exit.position = exitTilePos;
    [_batchNode addChild:_exit];

我检查玩家是否已经使用以下代码退出:

CGRect tankBoundingBox = CGRectMake(_tank.position.x - _tank.contentSize.width/2, _tank.position.y + _tank.contentSize.height, _tank.contentSize.width, _tank.contentSize.height);
CGRect exitBoundingBox = CGRectMake(_exit.position.x - _exit.contentSize.width/2, _exit.position.y + _exit.contentSize.height, _exit.contentSize.width, _exit.contentSize.height);
for (Tank *enemy in _enemyTanks) {
                if (CGRectIntersectsRect(sprite.boundingBox, enemy.boundingBox)) {

                    [childrenToRemove addObject:sprite];
                    enemy.hp--;
                    if (enemy.hp <= 0) {
                        [_enemyTanks removeObject:enemy];
                        [childrenToRemove addObject:enemy];
                    } else {
                    }
                }
            }

我在设置 exitBoundingBox 的行出现错误,但不是 tankBoundingBox。有人可以告诉我我做错了什么吗?

如果有任何帮助,我正在使用Ray Wenderlich 的教程来执行此操作,并且我完全按照他在他的网站上的方式复制了代码(尽管我在 BoundingBoxes 中添加了代码)。

4

2 回答 2

1

您的代码中的问题是您正在使用某些对象的位置构建 CGRect 。好吧,实际上问题是您获得位置的那些对象之一被释放了。您应该使用 NSZombie 来检测哪一个并修复问题。 这是一个说明如何做到这一点的参考。

编辑:我怀疑坦克对象是问题,但我必须看到更多的代码。EDIT2:ccp定义为CGRectMake. 所以没有区别。

于 2012-07-17T21:45:35.050 回答
1

根据对 OP 的评论:

不确定 ccp 是如何工作的,但看起来您用来构造 cgrect 的值之一是脏的。

于 2012-07-17T22:39:47.990 回答