ここ数日、私は卓球のようなゲームを作ろうとしてきました。私は2つのパドルとボールを持っています。すべての動的スプライト。私が抱えている1つの問題を除いて、すべてがうまくいっています。ボールはある時点で同じ角度で跳ね返る傾向があります。そのため、プレーヤーが特定の部分でパドルを動かすだけで、ゲームがしばらく続くか、永遠に続く場合があります。これは、パドルのどの部分に当たってもボールの角速度が変わらないためです。 . 直線速度と角速度の組み合わせを使用して、ボールを次のように動かし続けています。
if(_isPaused == FALSE)
{
_world->Step(dt, 10, 10);
for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) {
if (b->GetUserData() != NULL) {
CCSprite *sprite = (CCSprite *)b->GetUserData();
if(sprite.tag == 2)
{
b2Vec2 dir = b->GetLinearVelocity();
dir.Normalize();
float currentSpeed = dir.Length();
int maxSpeed = 60;
float accelerate = vel;
if(currentSpeed <= maxSpeed)
{
b->SetLinearVelocity(accelerate * dir);
}
sprite.position = ccp(b->GetPosition().x * PTM_RATIO,
b->GetPosition().y * PTM_RATIO);
sprite.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
//Keep sprite from bouncing in a straight angle
b->SetAngularVelocity(_body->GetAngle());
}}}
私の質問は、角速度を操作して、パドルと衝突するたびにボールがさまざまな角度でバウンドし続けるようにするにはどうすればよいかということです。現在の角速度を取得し、それに何らかの値を掛けるようなことを考えていますが、それが私が抱えている問題にアプローチする正しい方法であるかどうかはわかりません。任意の提案やアイデアをいただければ幸いです。ありがとうございます。