0

CCPhysicsSprite はいくつかの点で CCSprite とは異なることに気付きました。たとえば、スプライトの位置を設定する前に本体を設定する必要があります。ボディを破棄しようとすると EXC_BAD_ACCESS エラーが発生するのは、これらの違いの 1 つだと思います。update メソッド内で scheduleSprite メソッドを呼び出します。

-(void)scheduleSprite {

if ([testSprite physicsSprite].b2Body != NULL) {
b2Vec2 force = b2Vec2(-5, 10.0 * [testSprite physicsSprite].b2Body->GetMass());
[testSprite physicsSprite].b2Body->ApplyForce(force, [testSprite physicsSprite].b2Body->GetWorldCenter() );

if ([testSprite physicsSprite].position.x < 0) {
world->DestroyBody([testSprite physicsSprite].b2Body);
[testSprite physicsSprite].b2Body = NULL;
    }
}
}

行を指す EXC_BAD_ACCESS を取得します

b2Vec2 pos  = _b2Body->GetPosition();

の中に

-(CGAffineTransform) nodeToParentTransform

メソッド、クラス内

CCPhysicsSprite.mm

ありがとう。

4

2 に答える 2

1

あなたが を破壊したにもかかわらずbody、 はspriteその仕事を続けます。

if ([testSprite physicsSprite].position.x < 0) {
    world->DestroyBody([testSprite physicsSprite].b2Body);
    [[testSprite physicsSprite] removeFromParentAndCleanup:YES];
}
于 2013-04-18T07:52:32.780 に答える