ブレイクアウト ゲームのチュートリアルに従って、独自のボディを持つ 3 つのスプライト (ボールと 2 つのパドル) を作成しました。私の質問は非常に単純かもしれません。申し訳ありませんが、私はまだ学んでいます。とにかく、私の問題は例とは異なり、スプライトはスケーリングされます。
-(id)init {
p1 = [CCSprite spriteWithFile:@"1.png"];
p1.position = ccp(160, winSize.height * 0.08);
p1.scaleX = 190 / 2 / p1.contentSize.width;
p1.scaleY = 58 / 2 / p1.contentSize.height;
b2BodyDef p1BodyDef;
p1BodyDef.type = b2_dynamicBody;
p1BodyDef.position.Set(160/PTM_RATIO, 40/PTM_RATIO);
p1BodyDef.userData = p1;
_p1Body = _world->CreateBody(&p1BodyDef);
b2PolygonShape p1Shape;
p1Shape.SetAsBox(p1.contentSize.width/PTM_RATIO/2, p1.contentSize.height/PTM_RATIO/2);
b2FixtureDef p1ShapeDef;
p1ShapeDef.shape = &p1Shape;
p1ShapeDef.density = 0.3f;
p1ShapeDef.friction = 1.0f;
p1ShapeDef.restitution = 0.0f;
_p1Fixture = _p1Body->CreateFixture(&p1ShapeDef);
}
ボディを作成した後、コンタクト リスナーを使用してパドルとボールの衝突を検出する update メソッドを作成しました。これは問題なく動作しますが、ゲームをテストしているときに、パドルの上部と側面の両方で約 2 ~ 3 cm ずれているように、実際のスプライトの位置と衝突していなくても、ボールがバウンドする場合があることに気付きました。これは、ポリゴンの形状とスプライトのスケール x とスケール y が異なるためだと思われます。私の質問は、ボディのサイズをスケーリングされたスプライトと同じにするにはどうすればよいですか? 私は次のようなものを試しました:
p1Shape.SetAsBox(190 / 2 / p1.contentSize.width/PTM_RATIO/2, 58 / 2 / p1.contentSize.height/PTM_RATIO/2);
しかし、あたかも物体がまったく存在しないかのように、衝突は無視されました。では、スケーリングされている場合、パドルの b2body をパドル スプライトと同じサイズにするにはどうすればよいでしょうか?