森のくまさんラストシーン3Dテストプログラムのデモは、BGMとアニメーションの同期が1秒でもズレると台無しになる。
◎移行完了しました前回の記事で、コンテントパイプライン系に問題が発生したと記述しましたが、解決しました。
それらのプログラムは別のプロジェクトに独立していたので、そのプロジェクトもXNA3.0に移行したら、あっさり動きました。
結局、ソースは何もいじらずに、ウィザードで変換してDLLを上書きしただけで移行できました。XNA先駆者達の報告では、移行に苦心した人の方が多そうだったので意外ですね。
◎タイミングがずれる問題移行したプログラムを動かしてみると、BGMとアニメーションのタイミングがずれるのが気になりました。実行する度にズレの程度が変わるのですが、酷い時は2〜3秒ずれます。
最初はXNA3.0の問題かと思いましたが、XNA2.0でも同じ現象が再現しました。そこでいろいろ試してみたのですが、実行する度にズレたりズレなかったり、ズレの幅もまちまちなので、同じテストを何度も行うはめになりました。
・XNA2.0の体操服化前のバージョンでも再現する
→体操服化が原因ではない
・EXEを実行しても再現する
→デバッグモードが原因ではない
・サブマシンでは再現しない
→メインマシンの環境の問題
・ネットワーク回線切断時に再現率が高い
→たまたま?
・全画面表示時に再現率が高い
→窓枠表示(非全画面表示)ではほぼ再現しない
◎原因判明CPU使用率を確認したら、窓枠表示時は15〜20%ぐらいで、全画面表示時はほぼ100%でした。結論としては「全画面表示時に処理落ちしてタイミングがずれる」ということですね。
尚、、メインマシンのCPUはCore2Duo-2.6GHzで、XNAプログラムはその片方のCPUで動作します。もう片方があるのでPC全体は余力があり、CGも綺麗で滑らかに表示されているので、処理落ちしてるとは気付きませんでした。
考えてみれば、表示処理がオーバーしてるのにフレームを落とさないからタイミングがずれるんでしょうね。ドライバ設定を調整すれば直るかもしれませんが…とりあえず原因判明したからいいや。
ちなみに、サブマシンの方はPentium4-1.6GHzですが、グラフィックボードGeForce5200FXを増設してます。古くて安いボードですが、結構役に立ってたんですね。
メインマシンはグラボ増設してません。XNAがオンボードで動くだけ儲けものですが、全画面表示がこんなにCPU負荷かかるとは知りませんでした。
◎気になること開発時はここまで気にならなかったんだけど、以前からこんなにズレてたかなぁ?う〜む…。
それと、起動時のデフォルトは全画面表示やめて窓枠表示にした方が良かったかなぁ?でもXNAゲームプレイヤーの大半はグラボ増設してそうだし…。
あと、タイミングを合わせる時間として、ゲーム時間(GameTime)はやめた方がいいのかなぁ?でも実時間から取得すると、途中の処理が飛ばされて変な現象やバグが出そうなんだよね…。
例:XNAプログラムは、タイトルバーを押すとゲーム時間がストップします。但し、BGMは非同期に演奏されます。今はゲーム時間を取得してるので、BGMとアニメのタイミングはズレますが、バグは発生しません(多分)。
◎次回予告変なところで時間を喰ってしまいましたが、原因は判明したので良しとしましょう。
次回からXNA3.0環境でプログラム開発をスタートします。
まずはマップですかね〜。
テーマ : ゲーム製作 関連 - ジャンル : ゲーム
コメントの投稿