2 つのボディ間に回転ジョイントを作成しました。別のボディがそのうちの 1 つ (タグ ==90 のボディ) と接触すると (下記の Contacter.mm を参照)、タグ == 90 のボディを破棄します。CCLOG を配置して、回転ジョイントのスプライト位置を追跡します。破壊されなかった機体。CCLOG はジョイント ボディが破壊されるまで正常に動作します。その後、CCLOG はコンソールへの出力を停止します。どうすればこれを解決できますか? 以下は関連するコードです。
コンタクタ.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;
}
}
HelloWorldLayer.mm 内の次のメソッドは update メソッドで呼び出され、ボディとスプライトを (タグ == 90) で破棄します。
-(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
}