「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で実行すると、
動作(ゲーム内でのキャラの移動速度等)が滅茶苦茶速くなってしまう」
現象は改善できると思います