11/08/17 17:47:19.15 YQYx4WBX
メインループ>>528ではこんな感じの実装にしてる。
呼び出しはHTMLから<body onLoad="main()"></body>で
function main() {
var fps = 60; //fps
var oldtime = Date.now();
var framenum = 0;
loop();
function loop() {
//処理
if (framenum > fps) framenum = 0;
newtime = Date.now();
if (framenum == 0) oldtime = Date.now();
framenum++;
targettime = Math.round(oldtime + framenum * (1000.0 / fps))
waittime = (targettime - newtime <= 0) ? 1 : targettime - newtime ;
setTimeout(main_routine, waittime);
}
}
予定時間に合うようにsetTimeoutの間隔を調整しながらループさせてる。
588:名前は開発中のものです。
11/08/17 19:12:38.33 HH5glzfw
どれもセオリーから外れてるよ
パフォーマンスが最高なのは、最短時間でtimeout回して(これからはrequestAnimationFrameだけど)
前回からの経過時間でfpsを算出するvfr。
ビジーループなんて絶対にやってはいけない。
589:名前は開発中のものです。
11/08/17 21:28:52.95 317iFgtY
未だに空ループでウェイトをとる人間がいたとは驚きである
590:名前は開発中のものです。
11/08/17 21:41:02.89 YQYx4WBX
requestAnimationFrameってのがあるんだ。知らなかった。
試してみるよ。
591:584
11/08/19 15:12:41.72 rMERX9g9
つまり>>584は、こうなるわけだな。
window.onload = function(e)
{
function anima()
{
requestAnimationFrame(anime);
draw();
}
anima();
};
でも、これだとFPSを指定できないな・・・。
もう少し調べて改良してみよう。
592:名前は開発中のものです。
11/08/19 21:49:35.63 rMERX9g9
遅くなったけど、
これか!
window.requestAnimFrame = (function()
{
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(/* function */ callback, /* DOMElement */ element)
{
window.setTimeout(callback, 1000 / 60);
};
})();
593:名前は開発中のものです。
11/08/20 15:58:36.23 x55/0vDO
こんな感じかな?(ブラウザ別対応部分は端折ってる)
window.onload = function() {
var oldtime;
var newtime = Date.now();
main_routine();
function main_routine() {
oldtime = newtime;
newtime = Date.now();
update(newtime - oldtime); //前回からの経過時間に応じたゲーム進行処理
draw(); //ゲーム描画処理
requestAnimationFrame(main_routine);
}
function update(elapsedTime){}
function draw(){}
}
594:名前は開発中のものです。
11/08/25 22:52:26.42 QKHlbpkj
グラディウス
URLリンク(html5-gradius.appspot.com)
595:名前は開発中のものです。
11/08/26 16:37:20.02 rUzy1Sx0
すっげ・・・
さすがに1面だけか
596:名前は開発中のものです。
11/08/26 17:13:07.12 ctJIj+c5
>>594
操作方法を教えてください。
CTRLを押下したらすげー滑らかに動くんだけどどういうこと?
597:名前は開発中のものです。
11/08/26 20:09:58.24 SUBaQPS8
(行番号:cynthia.js)
70: function handleKeydown (e) {
73: switch (e.keyCode) {
75: case 17: turboState = true; break;
で、ゲームループが
230: setTimeout(arguments.callee, t < 33 && !turboState ? 33 - t : 0);
こうなってるから、Ctrlキー押したらノーウェイトで動くんだろ。
それにしても完成度の高いプログラムは素人には色々勉強になるな。ありがたい。
598:Perl忍者
11/08/26 23:07:08.58 YC3MR/cb
お前らはほんとにゴミだな
所詮jsガキのかじり
ごみごみゴミゴミギオゴミゴミゴmゴイgモgミ
死ね
599:名前は開発中のものです。
11/08/27 04:36:55.08 MFAFR1Ny
俺がjavascript覚えたてのころ作ったのとえらい違いだ
URLリンク(www42.atwiki.jp)