ページ 1 / 1
DXライブラリを使用して画像が表示できない
Posted: 2009年8月15日(土) 16:58
by kb98
以下の「ゲームプログラミングの館」さんのサンプルコードを
実行したのですが、画像が表示されません。
#include "DxLib.h"
char st1[/url]="画像の保存場所が違うか、ファイル名が違うため、表示できません。";
char st2[/url]="正常に認識されています。";
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) return -1;
if(LoadGraphScreen( 0 , 0 , "char.PNG" , TRUE ) == -1)
DrawString(50,220,st1,GetColor(255,255,255));
else
DrawString(50,220,st2,GetColor(255,255,255));
WaitKey() ;
DxLib_End() ;
return 0 ;
}
実行するとウィンドウは表示されますが、その後モニタにノイズが
走ったり、数度点滅したりしますが画像も文字列も表示されることはなく
ウィンドウは黒いままです。エラーや警告メッセージはなしです。
素人目に見ても、モニタ点滅時に描画処理を行おうとしているのに
何らかのトラブルが発生してる雰囲気が感じられます。
私の実行環境は、
Windows Vista Home Premium SP2
Visual C++ 2008 EE です。
上記のサンプルコードを友人のWindowsXP SP3にて実行させてもらうと
正常に動作します。(VCの設定は私のPCと同じ状態にさせてもらいました)
"char.PNG"の保存場所が違うということはないようです。
関係があるか分かりませんが、グラボはGeForce9800GT
DirectXバージョンは10です。
友人PCのグラボは聞きそびれました、DirectXバージョンは9だったかと。
ハードの相性やソフトのバージョンの問題なのかまるで検討が
つかないためご意見を伺えましたら大変助かります。
Re:DXライブラリを使用して画像が表示できない
Posted: 2009年8月15日(土) 17:48
by Justy
[color=#d0b0c0" face="monospace]
>以下の「ゲームプログラミングの館」さんのサンプルコードを
>実行したのですが、画像が表示されません
[/color]
表の画面に描いてそのまま表示するこのサンプルは Vistaでは
正常に動作しないかもしれません。
試しに、そのサンプルコードの WinMain関数の中を以下のように
書き直してみてください。
[color=#d0d0ff" face="monospace]
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) return -1;
SetDrawScreen(DX_SCREEN_BACK);
if(LoadGraphScreen( 0 , 0 , "char.PNG" , TRUE ) == -1)
DrawString(50,220,st1,GetColor(255,255,255));
else
DrawString(50,220,st2,GetColor(255,255,255));
ScreenFlip();
WaitKey() ;
DxLib_End() ;
return 0 ;
}
[/color]
これは同サンプルコードを裏画面に一度描画してから切り替えて表示するように
したものです。
これで何か表示される……かもしれません。
が、これでもダメなら同じくWinMain関数の中を
[color=#d0d0ff" face="monospace]
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1) return 0;
SetDrawScreen( DX_SCREEN_BACK );
int image = LoadGraph("char.png");
while(!ProcessMessage())
{
ClearDrawScreen();
if(image == -1)
DrawString(50,220,st1,GetColor(255,255,255));
else
DrawString(50,220,st2,GetColor(255,255,255));
ScreenFlip();
}
DxLib_End();
return 0;
}
[/color]
としてみて下さい。
もしこれもダメでしたら、プロジェクトのディレクトリに Log.txtというファイルが
あるかと思います。
そのファイルを見て、何かエラーとか失敗などの文字がないか調べてみてください。
Re:DXライブラリを使用して画像が表示できない
Posted: 2009年8月15日(土) 20:15
by kb98
Justy様
ご返事いただきありがとうございます。
ご提示いただいた2つのコードを実行してみました。
1つ目のコード、裏画面→表画面では今までと同様の結果となりました。
黒ウィンドウ・モニタ点滅です。
Logでは「周期的エフェクトの作成に失敗しました。」という
もの以外にはエラー・失敗などで該当するものは見つかりませんでした。
2つ目のコードでは、しばらく点滅したのちにエラー終了しました。
Logは上記の「周期的~」以外に、
DxLib_VC2005用.exe の 0x77cd9b2b で初回の例外が発生しました
: 0xC0000005: 場所 0x06a58000 に書き込み中にアクセス違反が発生しました。
DxLib_VC2005用.exe の 0x77cd9b2b でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0x06a58000 に書き込み中にアクセス違反が発生しました。
プログラム '[3652] DxLib_VC2005用.exe: ネイティブ' はコード -1073741819 (0xc0000005)
で終了しました。
元のサンプルコードを開く際に、VC++2008に互換処理を云々とありましたが、
そのあたりの問題なのでしょうか。
サンプルコード自体は「VC2008用_2005用」とはなっていました。
Re:DXライブラリを使用して画像が表示できない
Posted: 2009年8月15日(土) 21:17
by Justy
この2つもダメとなると、困りましたね……。
ちょっと普通の問題ではないようです。
[color=#d0b0c0" face="monospace]
>周期的エフェクトの作成に失敗しました
[/color]
それはフォースフィードバック関連のジョイパッド周りのエラーのようです。
[color=#d0b0c0" face="monospace]
>DxLib_VC2005用.exe の 0x77cd9b2b で初回の例外が発生しました
[/color]
Vistaで実行したときのメモリマップとかは詳しくはないのですが、
XPと似通ってると仮定するなら、なんかDXライブラリよりさらに下の階層で
何か問題が起きているようにもみえますね。
[color=#d0b0c0" face="monospace]
>元のサンプルコードを開く際に、VC++2008に互換処理を云々とありましたが
[/color]
VS2005用のプロジェクトを VS2008用に変換する処理だと思うので、
そこはあまり関係ないかと思います。
さて、以後のチェック項目としては
・ 私用している DXライブラリは最新版(2.25b)かどうか確認してください。
・ ジョイパッドが刺さっていたら抜いてください
・ 2つめのコードで ChangeWindowMode(TRUE)を ChangeWindowMode(FALSE)にしても
同様の現象になるかどうか見てください
(フルスクリーンで実行されるので注意。終了するときは Alt+F4を押してください)
・ グラフィックスなどのドライバは最新かどうか確認してください。
くらいしか思いつきません。
上記項目全てチェックしても改善されないようでしたら
DXライブラリ本家の掲示板の方に相談されるのがいいかと思います。
DXライブラリ置き場 HOME
ttp://homepage2.nifty.com/natupaji/DxLib/index.html
DXライブラリ質問掲示板
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?
Re:DXライブラリを使用して画像が表示できない
Posted: 2009年8月15日(土) 22:59
by kb98
Justy様
度々ありがとうございます。
教えていただいたチェック項目について調べてみました。
> ・ 私用している DXライブラリは最新版(2.25b)かどうか確認してください。
2.25bでした。
> ・ ジョイパッドが刺さっていたら抜いてください
「周期的エフェクトの作成に失敗しました 」のメッセージは確かに消えました。
ありがとうございます。
> ・ 2つめのコードで ChangeWindowMode(TRUE)を ChangeWindowMode(FALSE)にしても
> 同様の現象になるかどうか見てください
点滅こそしませんが、何も表示されませんでした。
> ・ グラフィックスなどのドライバは最新かどうか確認してください。
グラボのドライバはつい最近アップデートしたので問題ないかと思います。
当面は廃棄予定だった古いノートPCで作業してみます…。
DXライブラリ様のところにも伺ってみようと思います。
色々とありがとうございました。