我正在使用cocos2d中的边界框来检测球与另一个精灵之间的碰撞,但是当我使用[self removeChild:Row4Tile1 cleanup: YES];
时,CGRect会停留在那里,而精灵被移除。有没有办法删除边界框?我将每个初始化为
Row4Tile1 = [CCSprite spriteWithFile:@"Row4.png" rect:(CGRectMake(Row4Tile1.position.x, Row4Tile1.position.y, 26, 73))];
Row4Tile1.color = ccc3(0, 168, 255);
Row4Tile1.position = ccp(301, 443);
Row4Tile1.rotation = 15.0;
[row4 addObject:Row4Tile1];
[self addChild:Row4Tile1];
然后我在if (CGRectIntersectsRect(ball.boundingBox, Row4Tile1.boundingBox))
之后删除它们
然而,我对多个精灵使用相同的图像,所以我不确定这是否重要。以下是tick方法的代码:
- (void)tick:(ccTime) dt {
_world->Step(dt, 10, 10);
for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) {
if (b->GetUserData() != NULL) {
ballData = (__bridge CCSprite *)b->GetUserData();
ballData.position = ccp(b->GetPosition().x * PTM_RATIO,
b->GetPosition().y * PTM_RATIO);
ballData.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
NSLog(@"ball position is %@", NSStringFromCGPoint(ballData.position));
for(CCSprite *sprite in row4){
if (CGRectIntersectsRect(ball.boundingBox, Row4Tile1.boundingBox)) {
[self removeBall];
[row4 removeObject:Row4Tile1];
[self removeChild:Row4Tile1 cleanup: YES];
}
if (CGRectIntersectsRect(ball.boundingBox, Row4Tile2.boundingBox)) {
[self removeBall];
[row4 removeObject:Row4Tile2];
[self removeChild:Row4Tile2 cleanup: YES];
}
if (CGRectIntersectsRect(ball.boundingBox, Row4Tile3.boundingBox)) {
[self removeBall];
[row4 removeObject:Row4Tile3];
[self removeChild:Row4Tile3 cleanup: YES];
}
}
删除球方法不存在,但工作正常,所以我没有添加它。它只是未被删除的行边界框
答案 0 :(得分:0)
«谈论没有删除内存?那么这里是另一个similar problem.
您将Row4Tile1添加到row4数组和self。所以只有当它的保留计数为0时才调用spall的dealloc。所以从数组中删除它并自己调用它的dealloc。查看上面的主题以获取更清晰的信息。
«如果只是用颜色rect绘图那么它可能是box2d调试形状或CC_SPRITE_DEBUG_DRAW是1.如果它是box2d形状,那么你需要在删除精灵之前销毁b2body。