トップページ > 記事閲覧
32bitのPCで実行すると超倍速?
名前:なずな殿 日時: 2016/07/24 10:51

windows8.1の64bitのPCで作成したゲームをXPの32bitのPCで実行すると、動作(ゲーム内でのキャラの移動速度等)が滅茶苦茶速くなってとてもプレイできません。 逆に32bitのPCで作ったゲームを64bitのPCで実行すると遅すぎてこれまたプレイできません。 なぜこうなるのでしょうか?
メンテ

Page: 1 |

Re: 32bitのPCで実行すると超倍速? ( No.1 )
名前:管理人 日時:2016/07/25 02:32

「windows8.1の64bitのPCで作成したゲーム」や「32bitのPCで作ったゲーム」は DXライブラリを使用して作成されたゲームという認識でよろしいでしょうか? 仮にそうだとしますと、「32bitのPCで作ったゲームを64bitのPCで実行すると遅すぎる」原因は 推測できませんが、「windows8.1の64bitのPCで作成したゲームをXPの32bitのPCで実行すると、 動作(ゲーム内でのキャラの移動速度等)が滅茶苦茶速くなる」原因はなんとなく推測できます ScreenFlip を実行した際に行われる「VSYNC(垂直同期)」の処理が正常に行われて いない可能性がありますので、タイマーを用いた同期処理を追加してみてください ↓こちらは GetNowHiPerformanceCount を使用してタイマーによる同期処理を行い、1秒間に60回  メインループが実行されるように( 逆に言うと、1秒間に60回以上メインループが実行されないように )した  サンプルプログラムとなりますので、よろしければ参考にしてください #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int x, add ; LONGLONG Time ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // 最初のフレーム用の時間を取得 Time = GetNowHiPerformanceCount() ; // メインループ x = 0 ; add = 8 ; while( ProcessMessage() == 0 ) { // 移動 x += add ; if( x < 0 || x > 640 ) add = -add ; // 画面のクリア ClearDrawScreen() ; // 四角形の描画 DrawBox( x, 120, x + 64, 120 + 64, GetColor( 255,255,255 ), TRUE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; // 60分の1秒( 0.016666秒 )経過するのを待つ while( GetNowHiPerformanceCount() - Time < 1000000 / 60 ) { Sleep( 0 ) ; } // 次のフレーム用の時間を取得 Time = GetNowHiPerformanceCount() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } タイマーによる同期処理を行えば、少なくとも 「windows8.1の64bitのPCで作成したゲームをXPの32bitのPCで実行すると、 動作(ゲーム内でのキャラの移動速度等)が滅茶苦茶速くなってしまう」 現象は改善できると思います
メンテ
Re: 32bitのPCで実行すると超倍速? ( No.2 )
名前:なずな殿 日時:2016/07/25 09:20

ありがとうございます!!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存