私はワームのようなゲームでロープ アクションに 2D 振り子を実装しています。最初は角度の公式を使用するつもりでしたangleNow = maxAngle * cos( sqrt(g/length) * t)
が、問題はロープ内の人間の衝突をどのように処理するかということです。現在は古典力学を使用しています。 ,私はあらゆる瞬間に求心力を計算しています.centripetal = gravity_constant * cos(speed_angle) + pow(speed,2)/length
したがって、ロープの男には2つの力がかかっています.1つは重力で、もう1つは求心力であり、常に変化しています.私は式を使用し
deltaVelocity = acceleration * (time - this.lastTime)
て速度の変化を計算します. 、重力デルタと求心デルタの更新が一貫していないため、これが問題になる可能性があります。ここでの問題は、ロープの長さが常に変化していることです。これは振り子ではなく、ロープは片側に非常に遠くまで行ってから戻ってくる傾向があります。
ところで、このゲームは Web ベースで、JavaScript を使用して実装しています。よろしくお願いします。これは、求心力を計算するために使用したコードです。
this.magnitude = (Math.pow(character.velocityX,2) + Math.pow(character.velocityY,2))/sprite.length;
this.angle = Math.atan(character.velocityY/character.velocityX);
this.delta = GRAVITY_CONSTANT * Math.cos(this.angle);
this.magnitude += this.delta;
character.velocityX += this.magnitude * Math.sin(this.angle) * ((time - this.lastTime) /1000);
character.velocityY -= this.magnitude * Math.cos(this.angle) * ((time - this.lastTime) /1000);