格闘ゲームをC++とDXlibで作ろうとしていますが
なかなか問題が解決できないため投稿させて頂きました。
「現象」
だいたい格闘ゲームとして戦えるとこまでは組んだのですが
キャラ画像を描画するときにFPSが60から50くらいまで下がる減少が起きます。
格闘ゲームだとFPSはかなり重要なので必ず解決したい問題です・・・
下がるタイミングとしてはキャラクターが特定のモーションに変化したときに落ちます。
同キャラで戦わせてみましたが、1Pでは下がらなかったのに、2Pでは下がるモーションもあります。
一度行った行動は処理落ちしないようです。
「設計」
・解像度は1280*720で開発しており、キャラ画像はだいたい300*400ぐらいです。
・キャラ画像ファイルはアニメーションを横にずらっと並べたpngファイルで8bit、24色まで減色してあります。
(モーションによってまちまちですが横サイズが8000を超えているものもあります)
・1キャラの全画像の合計容量は3.23MGでした。
・画像のロードはモーションごとに" LoadDivGraph "で読み込んでいます。
読み込むタイミングはお互いのキャラ選択が終了したときに一度だけロード関数を呼び出しています。
・描画はDrawRotaGraph3をつかってブレンド、色調整できる関数描画を作り
エフェクト、UIも含めて同じ関数で描画できるようにしていました。
・背景はありません。
・ロードをループに入れていることもないです。
「環境」
OS:windows7 Home Premium 64ビット
CPU:Intel Core i7-3820CPU@3.60GHz
メモリ:16384MG RAM
DirectXバージョン:DirectX11
チップの種類:GeForce GTX 560
メモリ合計:4050MG
メインドライバ:nnvd3dumx.dll,nvwgf2umx.dll,n
ドライババージョン:9.18.13.1106
VC++ 2010Express
DXlib 3.10e
ゲームパッド「SANWA JY-P69UW」2つ
「試してみたこと」
・エフェクト、UIの描画関数をすべてコメントアウト→効果なし
・SetDrawBright();やブレンドモードを変更すると重くなるらしいので、それ系の関数をすべてコメントアウト→効果なし
・バトル開始直前にすべてのモーションを高速で描画してみる→なぜか効果なし!?
・DrawRotaGraph3は重いらしいので早いと噂のDrawExtendGraphで描画→効果なし
・Releaseで実行→効果なし
・VRAMがなんかあやしいので" SetUseNotManageTextureFlag( FALSE ); "を試す→効果なし
・" SetUseVramFlag( TRUE ); "を行ってみる→効果なし
・" SetScreenMemToVramFlag( FALSE ); "を入れてみる→現象が変化!
「特定のモーションでFPS低下」→「常にFPSは60~55でガタついているが、特定のモーションでは変化しない」
・↑コレなら" SetWaitVSyncFlag(FALSE); "で処理速度上がるからイケるかも!→FPSはあがったが結局ガッタガタ
☆FPSを保てた解決?方法
SetWaitVSyncFlag(FALSE) ;
SetUseVramFlag( TRUE ) ;
SetScreenMemToVramFlag( FALSE ) ;
if( DxLib_Init() == -1 ) return -1;
SetUseNotManageTextureFlag( FALSE ) ;
FPSが60.3~59.9を保つようになりました。(画面ガタガタしますが)
長くなりましたが以上です。
画像ファイルが大きすぎなのでしょうか?
ロード方法に問題があるのでしょうか?
よろしくお願いいたします。