ページ 11

フルスクリーンモードの描写について

Posted: 2010年4月11日(日) 23:16
by no
以下のプログラムについて疑問があります。
実行すると、ウィンドウモードなら問題なく動作しますが、
フルスクリーンモードだと何も描写されません。

見た感じ描写されないというより、表裏画面の操作がうまくいっていないように感じられます。
なお、Escキーを押すと一瞬だけ描写がなされます。

原因、解決法のほど、よろしくお願いします。
#include "DxLib.h"
#include <math.h>
#define PI 3.1415


void message_box(){
        int flag;
        flag=MessageBox(
                NULL ,
                TEXT("フルスクリーンモードで起動しますか?") ,
                TEXT("スクリーン設定") , 
                MB_YESNO | MB_ICONQUESTION );
        if(flag==IDNO)
                ChangeWindowMode( TRUE );
}


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    SetMainWindowText( "サンプル" );//ウィンドウの名前
    message_box();//フルスクリーンにするかどうかの関数

    char KeyBuf[256];
    int sample_img[10];
    int e_x;
    int e_y;
    int counter=0;

    if( DxLib_Init() == -1 ) return -1; 
    SetDrawScreen( DX_SCREEN_BACK );

    sample_img[0]=LoadGraph("img/icon.png");
    sample_img[1]=LoadGraph("img/moya.png");
    e_x=640/2;
    e_y=480/2;


    while(!ProcessMessage() && !GetHitKeyStateAll( KeyBuf ) && !KeyBuf[KEY_INPUT_ESCAPE]){
        ClearDrawScreen();

        double enemydy=sin(PI*2/130*(counter%130))*5;

        DrawGraph(e_x-55,e_y-55+enemydy,sample_img[0],TRUE);
        DrawRotaGraph(e_x-70   ,e_y,1 ,    PI*((double)counter*0.1) , sample_img[1] ,TRUE); 
        DrawRotaGraph(e_x+70   ,e_y,1 ,   -PI*((double)counter*0.1) , sample_img[1] ,TRUE); 


        
        counter++;
        ScreenFlip();
    }
    

    DxLib_End() ;                // DXライブラリ使用の終了処理

    return 0 ;                    // ソフトの終了
}

Re:フルスクリーンモードの描写について

Posted: 2010年4月13日(火) 07:41
by Ma
テストしていないので、正確ではありませんが

ClearDrawScreen()
ScreenFlip()
ProcessMessage()

の呼び出し順番次第で、たまにおかしな挙動があることがありました。
(別に描画後にScreenFlip() をせずにClearしたというわけでもなくです。)


ClearDrawScreen()
を、ScreenFlip()
の直後においても同じ挙動が再現しますか?

それでも駄目なら他の人の意見を待つか、公式掲示板で質問をしてみるといいですよ。

Re:フルスクリーンモードの描写について

Posted: 2010年4月13日(火) 16:27
by ookami
ClearDrawScreen() では画面クリア以外にも何か初期化された気がします。
なんだかんだで、私は DrawBox(0,0,640,480,GetColor(0,0,0),true) を使っています。アナクロですが。見当違いならすみません。 画像

Re:フルスクリーンモードの描写について

Posted: 2010年4月13日(火) 19:34
by 紅葉
試していませんがソースは問題ない気がします。
私もvistaのノートパソコンで似たようなことになりました。

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
のすぐ後に
SetUse3DFlag(FALSE);
を書いても駄目でしょうか?

Re:フルスクリーンモードの描写について

Posted: 2010年4月13日(火) 20:36
by no
Maさん>
その方法でも解決には至りませんでした。
薄々感じていますが、どちらかというと環境が原因なのではないかと思っています。

ookamiさん>
なるほど、それもありですね。得たい結果を導くことができるので、その方法も一つの手段だと思います。
ですが、結果よりも原因が知りたいので、その方法は最終手段に取っておきたいと思います。

紅葉さん>
その方法でうまくいきました。

http://homepage2.nifty.com/natupaji/DxL ... html#R15N1

こちらですね。
なるほど。読んでみるとやはり、環境の問題のようですね。グラボが悪さをしていたようです。
仮に配布など、多種類の環境で動作させる場合を考慮すると、このような処置も必然的に必要になってきますね。

勉強になりました。
ありがとうございます。


これで解決とさせていただきます。

Re:フルスクリーンモードの描写について

Posted: 2010年4月13日(火) 21:54
by 紅葉
解決して良かったですww

ただそれをすると一部の3D関連の機能が
使えなくなる可能性がありますので注意して下さい。

多分なのですがそのPCではここの管理人様のエアロビート?がプレイ出来ない気がします。

グラボの更新等で直ることもありますが余り期待しないで下さいww