1

このようなゲームループがあるとしましょう

function update(){

myTime = Date.now() - myTime

// use myTime as you wish...


// reset myTime
myTime = Date.now()  

}

理想的には 60fps で何かが発生しますが、常にそうとは限りません。Date.now() を使用して、あるフレームと別のフレームの間で発生するミリ秒数を知る必要があります。理由は次のとおりです。

変数がありますX。この変数は、1 秒ごとに 480 単位増加するように線形に増加する必要があります。この増加は可能な限りスムーズに行う必要があるため、ミリ秒ごとに 0.48 にする必要があると思います。

16,6 ミリ秒 (60fps) ごとに画面に描画することを考えると、どうすればそれを行うことができますか? 0,48 * 16,6 を追加してそれを補正する必要がありますか? または... どんなフォーラムですか?私はこれに夢中になっています、事前に感謝します!

4

1 に答える 1

0

よくわからない質問ですが、参考になるでしょうか?

関数が最後に実行されてからの時間を取得するには、次のようにします。

var lastTime = Date.now();

function update(){

    //do stuff here

    var myTime = Date.now(),
        timePassed = myTime - lastTime; //time passed since last time
    lastTime = Date.now(); //set for next time
}

関数が毎秒何回実行されるかを確認するには、次のようにします。

var lastTime = Date.now(), framerate=1;

function update(){

    //do stuff

    framerate++;
    if ((Date.now()-1000)>lastTime) { //if a second or more has passed
        console.log(framerate); //log number of times function has ran
        framerate=0;  //and reset values
        lastTime = Date.now();
    }
}

これらの関数に参加するには、次のようにします。

var lastTimeEach = Date.now(), lastTimeSecond = Date.now(), framerate=1, x=480;

function update(){

    //do game logic

    var myTime = Date.now(), //time now
        timePassed = myTime - lastTimeEach; //time passed since last iteration
    lastTimeEach = Date.now(); //reset for next iteration

    framerate++;
    if ((myTime-1000)>lastTimeSecond) { //one second has passed
        x += 480; //add 480 to x
        framerate=0; //reset framerate
        lastTimeSecond = Date.now(); //reset for next second
    }
}​

ここにデモンストレーションがあります

于 2012-05-27T21:04:21.100 に答える