[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[WitchTech 00636] 75fps と定速動作
- Subject: [WitchTech 00636] 75fps と定速動作
- From: Kenichiro Ueda <ueken@pluto.dti.ne.jp>
- Date: Thu, 25 Jan 2001 03:43:31 +0900
うえけんです。
スワンは確かに秒間75フレームのようなことが書いてあります。
80186 互換3MHzの貧弱CPUにしては、結構きついスペックだと
思います。
ゲーム機なんかは60フレームを基準に設計してあることがほと
んどですので、1ループを1/60秒で処理すればいいわけです。
スワンはCPUが遅い上に1/75秒で1ループを処理しないと
いけないので、処理時間的に厳しくなっています。
そこで、Vブランク待ち関数を探してみたら・・・ないですね。
ちゃんちゃん。じゃなくて、どうやらsys_waitを使えということ
のようです。でも重い処理を複数Vブランクに分割して処理する
場合これではまずいことがあります。
1ループを「ジャスト2ブランク」で一定にしたい、という場合、
sys_waitでは正確に処理時間を設定できません。あるループでは
処理がぎりぎり間に合って2Vですんだけど、時々オーバーして
3Vかかるという現象が起きて、動作がカクカクしてしまいます。
ではどうするかというと、
1.volatile int(まあcharでもいいですが)のグローバル変数
を1個用意する。これはVブランクカウンタとして使う。
2.初期化で0クリアしておく
3.Vブランクコールバック関数を登録する。コールバックの中
では、Vブランクカウンタを+1するだけ。
4.ゲームループに入る。
5.ゲームのループエンドで、指定Vブランク経過したかどうか
をチェックする(Vブランクカウンタの数値を見る)。
6.1ループに費やすカウント分Vブランクカウンタが増えたら
ループの頭に戻る。
という処理をすれば、画面を乱さずに1ループを複数Vブランク
で処理できるはずです。たとえば1ループに4フレームかけると
すると、Vブランクカウンタと0x03の&をとって、0ならループ
の先頭に戻る、というような処理で行けるのではないかと。
実は多忙にかまけて、買ったはいいがぜんぜんいじっていません
でした。改めてマニュアルを調べてみると、言っちゃなんだけど
ライブラリが貧弱ですね。特に画面制御系が弱いような気がしま
す。もうちょっとユーザレベルで細かくいじれるように整備して
くれるといいんですが。
ML Archives