我正在制作一个游戏,其中玩家上升到出口并被运送到下一个级别。当我编译项目时,我收到消息: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's tutorial来执行此操作,我将代码完全复制到他的网站上(虽然我添加了BoundingBoxes)。
答案 0 :(得分:1)
代码中的问题是您正在使用某些对象的位置构建CGRect。嗯,实际上问题是你获得位置的那些对象之一被释放了。您应该使用NSZombie来检测哪一个并修复问题。 Here's一个参考,告诉你如何做到这一点。
编辑:我怀疑坦克对象是问题,但我必须看到更多的代码。 EDIT2:ccp
定义为CGRectMake
。所以没有区别。
答案 1 :(得分:1)
基于对OP的评论:
不确定ccp是如何工作的,但看起来你用来构造cgrect的其中一个值是脏的。