私は Javascript (HTML5 Canvas) でゲームに取り組んでいます。オブジェクトが別のオブジェクトをたどることを可能にする単純なアルゴリズムを実装しました。これは、基本的な物理学が混在しています (オブジェクトを正しい方向に駆動する力ベクトルと、速度が運動量を積み上げますが、一定の抗力によって減速されます)。現時点では、マウス (x, y) 座標に沿った長方形として設定しています。コードは次のとおりです。
// rectangle x, y position
var x = 400; // starting x position
var y = 250; // starting y position
var FPS = 60; // frames per second of the screen
// physics variables:
var velX = 0; // initial velocity at 0 (not moving)
var velY = 0; // not moving
var drag = 0.92; // drag force reduces velocity by 8% per frame
var force = 0.35; // overall force applied to move the rectangle
var angle = 0; // angle in which to move
// called every frame (at 60 frames per second):
function update(){
// calculate distance between mouse and rectangle
var dx = mouseX - x;
var dy = mouseY - y;
// calculate angle between mouse and rectangle
var angle = Math.atan(dy/dx);
if(dx < 0)
angle += Math.PI;
else if(dy < 0)
angle += 2*Math.PI;
// calculate the force (on or off, depending on user input)
var curForce;
if(keys[32]) // SPACE bar
curForce = force; // if pressed, use 0.35 as force
else
curForce = 0; // otherwise, force is 0
// increment velocty by the force, and scaled by drag for x and y
velX += curForce * Math.cos(angle);
velX *= drag;
velY += curForce * Math.sin(angle);
velY *= drag;
// update x and y by their velocities
x += velX;
y += velY;
そして、それは毎秒60フレームでうまく機能します. さて、難しい部分: 私の質問は、これを別のフレームレート (たとえば 30 FPS) に変更した場合、力とドラッグの値を変更して動きを一定に保つにはどうすればよいかということです。
つまり、現在、私の長方形 (位置は x 変数と y 変数によって決定されます) は、毎秒約 4 ピクセルの最大速度で移動し、約 1 秒で最大速度まで加速します。しかし、フレームレートを変更すると、動きが遅くなります (たとえば、30 FPS はフレームあたりわずか 2 ピクセルに加速します)。
では、入力として FPS (フレーム/秒) を受け取り、リアルタイムで同じように動作する正しい「ドラッグ」値と「フォース」値を吐き出す方程式を作成するにはどうすればよいでしょうか?
難しい質問であることは承知していますが、おそらくゲーム デザインの経験があるか、物理学のプログラミングの知識がある人が助けてくれるでしょう。ご尽力いただきありがとうございます。
jsFiddle: http://jsfiddle.net/BadDB