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