[過去ログ] 物凄い勢いで誰かが質問に答えるスレ@ゲーム製作技術 (1001レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
637(3): 名前は開発中のものです。 [sage] 02/05/17 01:04 ID:??? AAS
static DWORD delta = 0;
DWORD t = ::timeGetTime();
if (g_pD3DDev->BeginScene() == D3D_OK) {
static float f = 0;
f += 1.0 * delta / 1000;
省略
g_pD3DDev->EndScene();
g_pD3DDev->Present(NULL, NULL, NULL, NULL);
}
delta = ::timeGetTime() - t;
1秒間で1.0進むのを表現するのに、上のようにしたのですが、
フレームレートが700fpsとか、非常に高いときdeltaが0になってしまい、
カクつくんですけど、どうしたらいいんでしょうか?
638: 名前は開発中のものです。 [sage] 02/05/17 01:06 ID:??? AAS
>>637
if (delta < .001f) delta = .001f;
640: 名前は開発中のものです。 [age] 02/05/17 09:37 ID:??? AAS
>>637
static DWORD t_old=-1; // 前フレの時間
static float = 0;
if (g_pD3DDev->BeginScene() == D3D_OK) {
DWORD t = ::timeGetTime(); // 今回の時間
if(t==-1)
{
delta=0;
} else {
delta=(t-t_old)/1000.f // 経過時間
}
f += delta;
t_old = t;
省略
g_pD3DDev->EndScene();
g_pD3DDev->Present(NULL, NULL, NULL, NULL);
}
こんな感じかと。
そもそも、floatをインクリメントするなと小一時間問い詰めたい。
あと、fは何やってるか解らんかったので適当に書いといた。
あんまり考えずに書いたので間違いがあればゴルァしてくれ。
641: 637 [sage] 02/05/17 09:47 ID:??? AAS
そうだね、インクリメントするのはよくないね
ってことで、下のように直しました。
range = 1.0f * normalize(delta) / 1000.0f;
#normalizeは0〜1000に正規化
概ねマトモに動いてますが、たまにカクつくことがあります。
これはdeltaを掛けている以上仕方がないことなんでしょうかね。
フレームレートを固定して、ドット単位で動きを扱う方が見た目綺麗なんですけど。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.027s