Cocos2d iphone 跟踪一个';车身';s';另一个车身接头损坏后的位置

Cocos2d iphone 跟踪一个';车身';s';另一个车身接头损坏后的位置,cocos2d-iphone,box2d,box2d-iphone,Cocos2d Iphone,Box2d,Box2d Iphone,我在两个身体之间创造了一个旋转关节。当另一个实体(见下面的Contacter.mm)与其中一个实体(标记为=90的实体)接触时,我销毁标记为=90的实体。我放了一个CCLOG来跟踪旋转关节体的精灵位置,这个位置没有被破坏。CCLOG工作正常,直到其接头体被破坏。然后,CCLOG停止打印到控制台。我怎样才能解决这个问题?以下是相关代码 Contacter.mm: #import "Contacter.h" #import "Box2D.h" @implementation Contacter

我在两个身体之间创造了一个旋转关节。当另一个实体(见下面的Contacter.mm)与其中一个实体(标记为=90的实体)接触时,我销毁标记为=90的实体。我放了一个CCLOG来跟踪旋转关节体的精灵位置,这个位置没有被破坏。CCLOG工作正常,直到其接头体被破坏。然后,CCLOG停止打印到控制台。我怎样才能解决这个问题?以下是相关代码

Contacter.mm:

#import "Contacter.h"
#import "Box2D.h"

@implementation Contacter

@synthesize arrayOfBodies = _arrayOfBodies;
@synthesize spriteToDestroy = _spriteToDestroy;

-(void)destroyBodies:(b2Body*)body   {
_arrayOfBodies = [[NSMutableArray alloc] init];
NSValue *bodyValue = [NSValue valueWithPointer:body];
[_arrayOfBodies addObject:bodyValue];
}

-(void)physicsSpritesContact:(CCPhysicsSprite*)onePhysicsSprite otherSprite (CCPhysicsSprite*)twoPhysicsSprite; {
int firstTag = onePhysicsSprite.tag;
int secondTag = twoPhysicsSprite.tag;

if (((firstTag == 90) && (secondTag == 101 )) || ((firstTag == 101) && (secondTag == 90))) {

if (tag1 == 90) {
    [self destroyBodies:onePhysicsSprite.b2Body];// adds body to array to be destroyed
    spriteToDestroy = onePhysicsSprite; // taking note of sprite to be destroyed

}
else if (tag2 == 90)   {
    [self destroyBodies:twoPhysicsSprite.b2Body];
    spriteToDestroy = twoPhysicsSprite;
}
}
在update方法中调用HelloWorldLayer.mm中的以下方法来销毁具有(tag==90)的主体和精灵:


在你销毁尸体之前你也销毁了一个关节吗?不,我只是销毁了尸体而没有销毁关节。你应该先移除关节吗?你不能改用NSlog吗。。
-(void)removeDestroyedBodiesAndSprites  {
if ([bodyContact arrayOfBodies]) {

for (NSValue* bodyValue in [bodyContact arrayOfBodies]) {
    b2Body *removeBody;
    removeBody = (b2Body*)[bodyValue pointerValue];

    world->DestroyBody(removeBody);
    removeBody = NULL;
    [self removeChild:[bodyContact spriteToDestroy]];

       }
    }
        CCLOG(@"y value for Sam sprite %f",[Sam samPhysicsSprite].position.y); // here is the CCLOG
}