ゲームの画面の大きさを変える処理を入れると重くなります

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ptepe2h
記事: 7
登録日時: 10年前

ゲームの画面の大きさを変える処理を入れると重くなります

#1

投稿記事 by ptepe2h » 10年前

ゲームを実行中でもボタン一つでフルスクリーン、ウィンドウモードを切り替えられるようにしたいのですが、
どうしても重くなってしまいます。
これを軽くしたいのですが、どうすればいいのでしょうか
試しに、プログラミングの館50章のmain.cppに変数を加えてメインループの先頭に以下の様に描きました

コード:

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
    ChangeWindowMode(TRUE);//ウィンドウモード
    int screenmode=0;
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
    
    while(ProcessLoop()==0){//メインループ
        if(CheckStateKey(KEY_INPUT_F4)==1){
            screenmode++;
            if(screenmode%2==0){
                ChangeWindowMode(TRUE);
	   load();
            }
            else{
                ChangeWindowMode(FALSE);
	   load();
            }
        }
        music_ini();
//以下は同じ
また、DXライブラリを最新バージョンに差し替えてあります
DXライブラリ VisualC++ 用(Ver3.11f)です

F4を押したら画面切り替え……というRPGツクールなどにある設定がしたいのです
これで一応、画面の切り替えは出来るのですが、
切り替える前は軽い(処理を描かない場合と同じ速度)のですが、一度切り替えると以後はずっと処理が重くなります
load関数が原因なのかもしれませんが、画像は読み込み直さないといけないですし
書く位置が悪いのでしょうか?
F4を押した場合だけ処理をする、と書いてあるのに、どうして最初は軽くて、押した後は重くなるのでしょうか
教えてください、お願いします


因みに、普通はChangeWindowModeというのはSetDrawScreen( DX_SCREEN_BACK )の前に書くもの、と何処かで視ました
しかしChangeWindowModはメインループの中に入れる必要があります、よね?
でもそうすれば後ろになってしまいますし、
SetDrawScreen( DX_SCREEN_BACK )はループの中に入れても良いのでしょうか?
ダメだったような気がしますが・・・

だんごさん
記事: 273
登録日時: 12年前

Re: ゲームの画面の大きさを変える処理を入れると重くなります

#2

投稿記事 by だんごさん » 10年前

画面切り替え時にハンドルをリセットしない関数を紹介します。

コード:

extern	int				SetChangeScreenModeGraphicsSystemResetFlag(	int Flag ) ;			// 画面モード変更時( とウインドウモード変更時 )にグラフィックスシステムの設定やグラフィックハンドルをリセットするかどうかを設定する( TRUE:リセットする( デフォルト )  FALSE:リセットしない )
SetDrawScreenはループに入れても構わないと思います。
しかし、おそらく上記の関数を使うことでSetDrawScreen関数もリセットされないはずですので一度呼び出せばよいかと。
 Dango San

ptepe2h
記事: 7
登録日時: 10年前

Re: ゲームの画面の大きさを変える処理を入れると重くなります

#3

投稿記事 by ptepe2h » 10年前

おお、出来ました。
ありがとうございますm(_ _)m
調べてみると、DxLibの非公開関数なんてあるんですね
これ便利っぽいけど何か支障があるんでしょうかね……?

SetDrawScreen云々は、SetDrawScreenの後ろにChangeWindowModeを入れるとカクカクするという記述を
何処かで見たような気がしたので質問しました。
まあ、そんなに変わらない、と言うか解らないので、放置しておきます

重ね重ね、ありがとうございましたm(_ _)m

Mana

Re: ゲームの画面の大きさを変える処理を入れると重くなります

#4

投稿記事 by Mana » 10年前

ptepe2h さんが書きました:SetDrawScreen云々は、SetDrawScreenの後ろにChangeWindowModeを入れるとカクカクするという記述を
何処かで見たような気がしたので質問しました。
まあ、そんなに変わらない、と言うか解らないので、放置しておきます
放置は良くない。

デフォルトではChangeWindowModeを実行するとSetDrawScreenの設定もリセットされる。
表画面を使うようになる。
だからカクカクする。
その場合の解決策はChangeWindowModeのあとにSetDrawScreen(DX_SCREEN_BACK)すること。
ptepe2h さんが書きました:SetDrawScreen( DX_SCREEN_BACK )はループの中に入れても良いのでしょうか?
ダメだったような気がしますが・・・
MakeScreenで作ったオフスクリーン画面に描画するのにSetDrawScreenでハンドルを指定する。
元に戻すためにSetDrawScreen(DX_SCREEN_BACK)する。
SetDrawScreenはいつでもどこでも好きなときに好きなだけ呼び出していい。

閉鎖

“C言語何でも質問掲示板” へ戻る