[過去ログ] 物凄い勢いで誰かが質問に答えるスレ@ゲーム製作技術 (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