1

私はワームのようなゲームでロープ アクションに 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);  
4

0 に答える 0