メッセージループというのを聞くのですが、どうやって使うのかが、いまいちわかりません。
だいたい60fpsを実装するには、どのようにすればいいのでしょうか?
メッセージループは、プロジェクトのソースに、1行で書かれていますよ。
Application.Run;
がそれです。
実際は、
repeat
{ メッセージ処理 }
until Terminated;
というようになっていて、終了するまでループしながら送られてきたメッセージを処理しています。
これがメッセージループです。
「60fpsを実装するには・・・」という質問があるということは、メッセージループではなく、ウェイト処理ですよね。
ある1処理を、毎秒n回、というように定期的に処理したい場合、次の処理に移るまで待つ必要があります。
このときの書き方は
while 次の処理の時間になっていない
begin
Application.ProcessMessages;
end;
や、
while 次の処理の時間になっていない
begin
Sleep(待つミリ秒);
end;
というような形になります。
60fpsを維持する方法は、垂直帰線割り込みを利用するのが常套手段です。
DirectXを使うと、割り込み待ちができたと思います。
それ以外だとポートを直接叩く方法ですが
https://www.petitmonte.com/bbs/answers?question_id=2609
こちらを参考にしてください。
DirectXを使わずに、画面のちらつきも考えないのなら、APIの
timeGetTime
QueryPerformanceCounter
などを使う方法もあります。
詳しい回答有難うございます。
OnIdle にかわるものだと思っていたのですが違うようですね…
Delphiゲーム製作講座
http://delphi.nce.buttobi.net/mainroutine/index.html
これじゃないですか?
ツイート | ![]() |