自作ドラクエの続き。
μsecオーダーの制御実現の為、CPUクロック回数を取得して、その回数を基準として画面更新を制御する事を思い付き実装していく。
但し、問題はVB6はイベント型全体のアプリの為、どうしてもメインルーチンの処理において遅延が発生する模様。
動作の占有権みたいなものがあり、VB6のアプリが動き、OS(Windows)側に戻り、再びアプリに戻り...と権限を入れ替える必要がある。
これを実施せずにVB6側に占有されてしまうと、画面更新がされなかったり、アプリがフリーズしてしまう事がある。
つまりアプリ側の動作がWindowsAPIを通じて実行されるべきが、アプリに占有されており実行されない、そんな状況になる模様。
なので、アプリの処理が終わったらWindowsに処理を渡す記述が必要になる。
これがVB6だとDoEventsと呼ばれる関数。
だが、これも微妙にクセがあり、適切にDoEventsを処理しないとこの関数自体がパフォーマンスオーバーを引き起こす要因にもなるし、かと言って関数を呼ばなければ占有されてしまう。
で、どうやらDoEventsの後に、Sleep(指定時間だけアプリを止める)を実施すると安定するとの情報があり、入れてみるとパフォーマンスが改善した。
理由は不明だが、Windowsとの連携がうまくできない、これがVB6。
そしてここに到達するまで更に2年ほどを要したのだが、相変わらずティアリング現象が発生する状況。
もう既にマップスクロールだけで4年ほどを費やしているが、結局、問題は解決しない。
そろそろ決断の時期が来た様だ。
「VB6で、標準関数のみで、ロールプレイングゲームは作れない」
という事だ。
まぁ、細かいところを気にしなければなんら問題は無いが、ティアリングがすごく気になり、一度気になるとダメな性格なので、そう結論付けた。
この結論に至るまで20年近くを要したが...。
そして2023年12月頃より、次のステップに移行した。
次回新章編に続く。