私は古い学校の ASCII DOS プロンプト ゲームを書いています。正直なところ、私は ZZT をエミュレートして、このブランドのゲーム デザインについてもっと学ぼうとしています (時代遅れであっても)。
私はうまくやっています。全画面テキスト モードが機能し、世界を作成して問題なく動き回ることができますが、レンダリングの適切なタイミング方法が見つかりません。
time.h からの delay()s または (clock()-renderBegin)/CLK_TCK チェックを追加しないと、レンダリングが非常に高速になるため、レンダリングとプリレンダリングのコードが高速であることはわかっています。
delay() は使用したくありません。これは、私のナレッジ プラットフォーム固有のものであり、その上、遅延している間はコードを実行できないためです (ユーザー入力や処理など)。だから私はこのようなことをすることにしました:
do {
if(kbhit()) {
input = getch();
processInput(input);
}
if(clock()/CLOCKS_PER_SEC-renderTimer/CLOCKS_PER_SEC > RenderInterval) {
renderTimer = clock();
render();
ballLogic();
}
}while(input != 'p');
「理論的には」うまくいくはずです。問題は、このコードを実行すると (RenderInterval を 0.0333 または 30fps に設定)、どこにも 30fps に近づかず、最大で 18 のようになることです。
RenderInterval を 0.0 に設定して、パフォーマンスが向上するかどうかを確認しようと思いましたが、そうではありませんでした。私は (RenderInterval が 0.0 の場合) 最大で 18 ~ 20 fps になりました。
おそらく、これらすべての clock() メソッドと「これをそれで割る」メソッドを継続的に呼び出しているため、CPU の速度が恐ろしいほど低下していたのかもしれませんが、if ステートメントの括弧から render と ballLogic 呼び出しを取り出し、RenderInterval を0.0 ここでも、非常に高速なレンダリングが得られます。
これは私には意味がありません。なぜなら、if チェックインをそのままにしておくと、動作が遅くなるのではないでしょうか? つまり、まだすべての計算を行う必要があります
ところで、私は Borland の Turbo C++ V1.01 でコンパイルしています。