PhysicsSprite クラスを使用しています
このコードを変更しました:
transform_ = CGAffineTransformMake( c, s,
-s, c,
x, y );
nodeToParentTransform
メソッドで:
transform_ = CGAffineTransformMake( c * scaleX_, s * scaleX_,
-s * scaleY_, c * scaleY_,
x, y );
問題は、このスクリーンショット (デバッグ描画で e_shapeBit が有効になっている) でわかるように、物理的なボディが間違って配置されていることです。
ボディは次のように作成されます。
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(brick.sprite.position.x/PTM_RATIO, brick.sprite.position.y/PTM_RATIO);
bodyDef.userData = brick.sprite;
b2Body *body = world->CreateBody(&bodyDef);
body->SetGravityScale(0);
brick.sprite.userData = body;
b2PolygonShape dynamicBox;
dynamicBox.SetAsBox(levelObj.brickScale * .5f, levelObj.brickScale * .5f);
b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicBox;
fixtureDef.density = 1.0f;
fixtureDef.friction = 0.3f;
body->CreateFixture(&fixtureDef);
body->SetType(b2_dynamicBody);
brick.sprite.userObject = brick;
[brick.sprite setPhysicsBody:body];
編集:
申し訳ありませんが、十分に明確にしていません: スケーリングとは、自然な Cocos2D 構築を意味しbrick.sprite.scale = 0.5f
、はクラスbrick.sprite
のインスタンスです。PhysicsSprite
変更nodeToParentTransform
しないと、まったく効果がありません。ブリック スプライトは 32x32px で、PTM_RATIO = 32
物理サイズは 1x1m であるため、SetBox パラメータです。