碰撞检查问题
问题描述:
因此,在我的游戏中,我有物品从屏幕顶部落下,当玩家(另一个精灵)抓住物品时,物品消失并将其添加到柜台。碰撞检查问题
这是我的碰撞检测方法
//WHEN THE THINGS COLLIDE, THEY DISSAPEAR
- (void)update:(ccTime)dt {
CGSize winSize = [[CCDirector sharedDirector] winSize];
NSMutableArray *targetsToDelete = [[NSMutableArray alloc] init];
for (CCSprite *target in _targets) {
CGRect targetRect = CGRectMake(
target.position.x - (target.contentSize.width/2),
target.position.y - (target.contentSize.height/2),
target.contentSize.width,
target.contentSize.height);
BOOL playerHit = FALSE;
CGRect playerRect = CGRectMake(
_Banker.position.x - (_Banker.contentSize.width/2),
_Banker.position.y - (_Banker.contentSize.height/2),
_Banker.contentSize.width,
_Banker.contentSize.height);
if (CGRectIntersectsRect(playerRect, targetRect)) {
//[targetsToDelete addObject:target];
playerHit = TRUE;
[targetsToDelete addObject:target];
break;
}
for (CCSprite *target in targetsToDelete) {
[_targets removeObject:target];
[self removeChild:target cleanup:YES];
_targetsDestroyed++;
[_label setString:[NSString stringWithFormat:@""]];
if (_targetsDestroyed > 30) {
GameWinScene *gameWinScene = [GameWinScene node];
_targetsDestroyed = 0;
[[CCDirector sharedDirector] replaceScene:gameWinScene];
} else{
NSString *killcounttext = [NSString stringWithFormat:@"Catches: %i", _targetsDestroyed];
self.label = [CCLabelTTF labelWithString:killcounttext fontName:@"Zapfino" fontSize:20];
_label.color = ccc3(225,225,225);
_label.position = ccp(winSize.width * 0.20,winSize.height * 0.92);
[self addChild:_label];
}
}
if (targetsToDelete.count > 0) {
[targetsToDelete addObject:target];
}
[targetsToDelete release];
}
}
我添加了一个CCLOG,以确保被添加的目标在我的下一个方法的话,我删除targetstodelete任何东西,因为targetstodelete。 CCLOG证实目标正在被添加,但它们并未被删除。
这是我的删除方法
for (CCSprite *target in targetsToDelete) {
[_targets removeObject:target];
[self removeChild:target cleanup:YES];
_targetsDestroyed++;
[_label setString:[NSString stringWithFormat:@""]];
if (_targetsDestroyed > 30) {
GameWinScene *gameWinScene = [GameWinScene node];
_targetsDestroyed = 0;
[[CCDirector sharedDirector] replaceScene:gameWinScene];
} else{
NSString *killcounttext = [NSString stringWithFormat:@"Catches: %i", _targetsDestroyed];
self.label = [CCLabelTTF labelWithString:killcounttext fontName:@"Zapfino" fontSize:20];
_label.color = ccc3(225,225,225);
_label.position = ccp(winSize.width * 0.23,winSize.height * 0.92);
[self addChild:_label];
}
}
任何帮助表示赞赏,但请不要随便说“去学习Objective-C”像有些人那样:/
答
在你的代码写了这线,
if (targetsToDelete.count > 0) {
[targetsToDelete addObject:target];
}
我不明白为什么你加这个,所以我认为这是错误,请检查否则解释为什么你添加此代码..
我这样做是因为在接下来的方法中,我检查CCSprite目标是否位于targetsToDelete中,如果是,则从场景中移除目标 – tyler53 2012-07-24 17:12:08
在此循环中,您获得目标,对于(CCSprite * target in targetsToDelete) {_targets removeObject:target]; [self removeChild:target cleanup:YES]; .......然后再次将目标添加到targetsToDelete,但没有代码可以从targetsToDelete中移除目标并持续释放[targetsToDelete release]; ,那么if(targetsToDelete.count> 0)是什么意思{targetsToDelete addObject:target]; } – Devang 2012-07-25 07:36:44