2017-03-22 12 views
0

私はゲームを作ろうとしています。私はDirectX 9を使用しています。フルスクリーンモードに移行しようとすると問題が発生します。現在のすべてのパラメータを初期化する関数を作った。私がwindowed = false(つまりフルスクリーンをtrueに設定する)以外は、すべてが問題ありません。ここDirectX PresentパラメータWindowed = false not working

は私の存在のパラメータ変数である:ここではD3DPRESENT_PARAMETERS d3dpp;

はd3dpp変数のコードです。このコードのすべてではないにしても、ほとんどがチャールズ・ケリーのProgramming 2D Gamesという本から来ています。

void Graphics::initD3Dpp() 
{ 
try { 
    ZeroMemory(&d3dpp, sizeof(d3dpp));    

    d3dpp.BackBufferWidth = width; 
    d3dpp.BackBufferHeight = height; 
    if (fullscreen)         
     d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; 
    else 
     d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; 
    d3dpp.BackBufferCount = 1; 
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; 
    d3dpp.hDeviceWindow = mainhwnd; 
    d3dpp.Windowed = (!fullscreen); //THIS LINE RIGHT HERE IS THE ISSUE 
    d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; 
} 
catch (...) 
{ 
    throw(GameError(gameErrorNS::FATAL_ERROR, 
     "Error initializing D3D presentation parameters")); 

} 

} 

私は理由がわかりません.windowedは私のためには機能しません。もっと文脈が必要なのかどうか私に尋ねてください。

+0

どのように正確に機能しませんか?あなたが見ているものと見たいものは何ですか? –

+0

あなたが選んだ幅と高さはどれですか?サポートされているディスプレイモードであることを覚えておいてください。 –

+0

私は私のダイレクトデバイスを作成するとき、それはnullポインタと私のプログラムがクラッシュするので、それは動作しません。フルスクリーンを使用しているときにフルスクリーンが表示されていないときは、DirectXデバイスが作成されます。 – lvl99knight

答えて

2

コメントから、600x480を使用していることをお勧めします。これがあなたのシステムでサポートされている解決策であることは非常に疑わしいです。おそらく6 0x480を使用することを意図していました。私が知る限り、この解像度は本質的にすべてのD3D9ドライバでサポートされています。

ただし、解像度をハードコーディングすることは、それはD3DPRESENT_PARAMETERSためdocumentationに記載されているアドバイスに従うと、お使いのデバイスのための有効な解像度と表示形式のリストを取得するには、EnumAdapterModes機能を使用することがはるかに実用的だ、堅牢なソリューションではありません。

+0

ありがとうございます。コードを変更しました。しかし、それはまだ機能しませんし、修正する時間がかかるでしょう。私は自分のコードを捨て、私の本が私に提供したコードを使用しています。 – lvl99knight