こんにちは。
今回は、ゲームプログラミングに関することです。
以下のソースをメイクし、実行するとウィンドウが開き、
水色の四角形が現れ、適当なキーを押すと終了するようなのですが、
私の場合、ウィンドウは開きますが水色の四角形など表れませんし、
キーを押しても終了せず、しばらくすると勝手に消えてしまいます。
メイクは普通にできます。
これを解消するにはどうすればよいのですか?
ご意見よろしくお願いしますm(_ _)m
↓ ↓ ソースです ↓ ↓
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1) return(-1);
DrawBox(0, 0, 120, 120, 65535, TRUE);
WaitKey();
DxLib_End();
return(0);
}
ゲームプログラミング
Re:ゲームプログラミング
となると
・ DrawBoxの行は実行されていますか?
デバッガでブレークをかけるか、OutputDebugString()で何か出力するとか、どういう方法でもいいのですが
その行が確実に実行されていることを確かめて下さい。
(つまり DxLib_Init()に失敗して、-1が戻った為にその後の行が実行されなかったのでは
ないか、ということです)
・ ログはどうなっていますか?
どこかに Log.txtというファイルが出来ていると思います。
このログのどこかでエラーの記述があったりしませんか?
・ SetUseDirectDrawFlag関数を使う
DxLib_Init()より前に SetUseDirectDrawFlag(FALSE)の1行を入れてみて下さい。
・ DrawBoxの行は実行されていますか?
デバッガでブレークをかけるか、OutputDebugString()で何か出力するとか、どういう方法でもいいのですが
その行が確実に実行されていることを確かめて下さい。
(つまり DxLib_Init()に失敗して、-1が戻った為にその後の行が実行されなかったのでは
ないか、ということです)
・ ログはどうなっていますか?
どこかに Log.txtというファイルが出来ていると思います。
このログのどこかでエラーの記述があったりしませんか?
・ SetUseDirectDrawFlag関数を使う
DxLib_Init()より前に SetUseDirectDrawFlag(FALSE)の1行を入れてみて下さい。
Re:ゲームプログラミング
丁寧なお返事ありがとうございます。
>DrawBoxの行は実行されていますか?
ブレークすると、どうもDrwaBoxが実行されてないみたいでした。
デバッグ(ブレーク)という機能があるなんてはじめて知りました。
>ログはどうなっていますか?
これも始めて存在に気づきました。
で、結果なのですが、一応、下に載せさせていたいてますが
僕が見つけた、異常みたいものは
「現在の画面モードで使用できる描画デバイスが見つかりませんでした」
というものです。
>SetUseDirectDrawFlag関数を使う
>DxLib_Init()より前に SetUseDirectDrawFlag(FALSE)の1行を入れてみて下さい。
なんと成功いたしました。
ただ、水色ではなく白で表示されました。
なぜこの関数を使うと、成功したのでしょうか?
よろしければ教えてくださいm(_ _)m
↓ ↓ ログファイルです ↓ ↓
0:システムの情報を出力します
2: DXライブラリ Ver2.23
4: OS WindowsXP ( Build 2600 Service Pack 2 )
108: CPU動作速度:大体1.59GHz
111: MMX命令を使用します
112: CPUベンダ:GenuineIntel
122: CPU名: Mobile Intel(R) Celeron(R) CPU 1.60GHz
124:COMの初期化... 成功しました
141:メモリ総量:190.98MB 空きメモリ領域:50.18MB
143:タイマーの精度を検査します
145:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60
149: パフォーマンスカウンターを使用します タイマー分解能 : 3579.545000 KHz
153: ソフトの二重起動検査... 二重起動はされていませんでした
162:ウインドウクラスを登録します... 登録に成功しました
170:ウインドウモード起動用のウインドウを作成します
341:IMEを無効にしました
543:ウインドウスタイルをウインドウモード用に変更します... 完了
549:DirectInput関係初期化処理
550: DirectInput7 の取得中... 成功
641: 引き続き初期化処理... 初期化成功
646: ジョイパッドの初期化...
657: ジョイパッドの初期化は正常に終了しました
659: マウスデバイスの初期化... 初期化成功
663: キーボードデバイスの初期化... 初期化成功
671:DirectInput 関連の初期化は正常に終了しました
672:DirectSound の初期化を行います
675:DirectSound インターフェースの取得を行います.... 成功
684:引き続きインターフェースの初期化処理... 成功
987: DirectSound デバイスを列挙します
992: モジュール名: ドライバ記述:プライマリ サウンド ドライバ
993: モジュール名: smwdm.sys ドライバ記述:SoundMAX Digital Audio
996: 最大サンプリングレート:48.00KHz 最小サンプリングレート:8.00KHz
999: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB
1000: 利用可能サンプリング精度
1002: プライマリ 16bit = OK 8bit = NO
1005: セカンダリ 16bit = OK 8bit = NO
1007: 利用可能チャンネル
1009: プライマリ MONO = OK STEREO = OK
1011: セカンダリ MONO = OK STEREO = OK
1013:DirectSound の初期化は正常に終了しました
1015:DirectDraw 関連の初期化を行います
1017: DirectDraw オブジェクトの取得を行います.... 成功
1028: 引き続き初期化処理... 初期化に成功しました
1040: ビデオカードの情報
1042: 画面モード変更処理を開始します
1138: 画面モードの変更処理を開始します 640 x 480 16 bit
1139: ウインドウモードにします
1141: 画面モードの変更は正常に終了しました
1143: カラー情報
1145: A:00000000 B:00ff0000 G:0000ff00 B:000000ff
1150: ウインドウスタイルをウインドウモード用に変更します... 完了
1155: 出力画面用の DirectDrawSurface を作成します
1168: 各スクリーンメモリの配置位置
1170: PrimaryBuffer : SYSTEMMEMORY
1173: BaskBuffer : SYSTEMMEMORY
1174: 出力画面用の DirectDrawSurface の作成は正常に終了しました
1176: Direct3D 関連の初期化を行います
1180: Direct3Dオブジェクトを取得します
1513: Direct3Dオブジェクトを取得しました
1515: 現在の画面モードで使用できる描画デバイスが見つかりませんでした
1517: グラフィック管理系の初期化を行います
1521: 3Dグラフィック描画機能は使用しません
1523: フォントの初期化を行います
1531: フォントの初期化は正常に終了しました
1533: グラフィック管理系の初期化は正常に終了しました
2975: サーフェス間転送には BltFast を使用します
2977: BitBlt:768416μs BltFast:667552μs
2979: スキャンラインの数:768
2982: 1フレーム当たりの時間は 0 msecです
2985: Tri00:0 msec
2987: Tri01:0 msec
2989: Tri02:0 msec
2991: Tri03:0 msec
2994: Tri04:0 msec
2996: Tri05:0 msec
2998: Tri06:0 msec
3003: Tri07:0 msec
3005: Tri08:0 msec
3006: Tri09:0 msec
3009: Tri10:0 msec
3014: Tri11:0 msec
3017: Tri12:0 msec
3019: Tri13:0 msec
3021: Tri14:0 msec
3023: Tri15:0 msec
3027: Tri16:0 msec
3028: Tri17:0 msec
3032: Tri18:0 msec
3034: Tri19:0 msec
3036: 画面モード変更処理は正常に終了しました
3043: オーバーレイサーフェスは使用しません
3046: DirectDraw 関連の初期化は正常に終了しました
3070: 文字コードバッファの初期化を行います... 完了しました
7141: DirectDraw 関連の終了処理をおこないます
7144: フォントの初期化を行います
7152: フォントの初期化は正常に終了しました
7154: グラフィック管理系の終了処理は正常に終了しました
7159: メインサーフェスを破棄をします... 完了しました
7162: DirectDrawオブジェクトを解放します
7167: DirectDrawオブジェクトを解放しました
7169: DirectDraw 関連の終了処理は正常に終了しました
7171: DirectInput 関連の終了処理... 完了
7190: DirectSound の終了処理は正常に終了しました
7193: ウインドウを閉じようとしています
7248: ウインドウが破棄されようとしています
7265: ソフトを終了する準備が整いました
8163:
8164: Alloc memory dump Total size:0(0.000kb) Alloc num:0
8170:
>DrawBoxの行は実行されていますか?
ブレークすると、どうもDrwaBoxが実行されてないみたいでした。
デバッグ(ブレーク)という機能があるなんてはじめて知りました。
>ログはどうなっていますか?
これも始めて存在に気づきました。
で、結果なのですが、一応、下に載せさせていたいてますが
僕が見つけた、異常みたいものは
「現在の画面モードで使用できる描画デバイスが見つかりませんでした」
というものです。
>SetUseDirectDrawFlag関数を使う
>DxLib_Init()より前に SetUseDirectDrawFlag(FALSE)の1行を入れてみて下さい。
なんと成功いたしました。
ただ、水色ではなく白で表示されました。
なぜこの関数を使うと、成功したのでしょうか?
よろしければ教えてくださいm(_ _)m
↓ ↓ ログファイルです ↓ ↓
0:システムの情報を出力します
2: DXライブラリ Ver2.23
4: OS WindowsXP ( Build 2600 Service Pack 2 )
108: CPU動作速度:大体1.59GHz
111: MMX命令を使用します
112: CPUベンダ:GenuineIntel
122: CPU名: Mobile Intel(R) Celeron(R) CPU 1.60GHz
124:COMの初期化... 成功しました
141:メモリ総量:190.98MB 空きメモリ領域:50.18MB
143:タイマーの精度を検査します
145:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60
149: パフォーマンスカウンターを使用します タイマー分解能 : 3579.545000 KHz
153: ソフトの二重起動検査... 二重起動はされていませんでした
162:ウインドウクラスを登録します... 登録に成功しました
170:ウインドウモード起動用のウインドウを作成します
341:IMEを無効にしました
543:ウインドウスタイルをウインドウモード用に変更します... 完了
549:DirectInput関係初期化処理
550: DirectInput7 の取得中... 成功
641: 引き続き初期化処理... 初期化成功
646: ジョイパッドの初期化...
657: ジョイパッドの初期化は正常に終了しました
659: マウスデバイスの初期化... 初期化成功
663: キーボードデバイスの初期化... 初期化成功
671:DirectInput 関連の初期化は正常に終了しました
672:DirectSound の初期化を行います
675:DirectSound インターフェースの取得を行います.... 成功
684:引き続きインターフェースの初期化処理... 成功
987: DirectSound デバイスを列挙します
992: モジュール名: ドライバ記述:プライマリ サウンド ドライバ
993: モジュール名: smwdm.sys ドライバ記述:SoundMAX Digital Audio
996: 最大サンプリングレート:48.00KHz 最小サンプリングレート:8.00KHz
999: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB
1000: 利用可能サンプリング精度
1002: プライマリ 16bit = OK 8bit = NO
1005: セカンダリ 16bit = OK 8bit = NO
1007: 利用可能チャンネル
1009: プライマリ MONO = OK STEREO = OK
1011: セカンダリ MONO = OK STEREO = OK
1013:DirectSound の初期化は正常に終了しました
1015:DirectDraw 関連の初期化を行います
1017: DirectDraw オブジェクトの取得を行います.... 成功
1028: 引き続き初期化処理... 初期化に成功しました
1040: ビデオカードの情報
1042: 画面モード変更処理を開始します
1138: 画面モードの変更処理を開始します 640 x 480 16 bit
1139: ウインドウモードにします
1141: 画面モードの変更は正常に終了しました
1143: カラー情報
1145: A:00000000 B:00ff0000 G:0000ff00 B:000000ff
1150: ウインドウスタイルをウインドウモード用に変更します... 完了
1155: 出力画面用の DirectDrawSurface を作成します
1168: 各スクリーンメモリの配置位置
1170: PrimaryBuffer : SYSTEMMEMORY
1173: BaskBuffer : SYSTEMMEMORY
1174: 出力画面用の DirectDrawSurface の作成は正常に終了しました
1176: Direct3D 関連の初期化を行います
1180: Direct3Dオブジェクトを取得します
1513: Direct3Dオブジェクトを取得しました
1515: 現在の画面モードで使用できる描画デバイスが見つかりませんでした
1517: グラフィック管理系の初期化を行います
1521: 3Dグラフィック描画機能は使用しません
1523: フォントの初期化を行います
1531: フォントの初期化は正常に終了しました
1533: グラフィック管理系の初期化は正常に終了しました
2975: サーフェス間転送には BltFast を使用します
2977: BitBlt:768416μs BltFast:667552μs
2979: スキャンラインの数:768
2982: 1フレーム当たりの時間は 0 msecです
2985: Tri00:0 msec
2987: Tri01:0 msec
2989: Tri02:0 msec
2991: Tri03:0 msec
2994: Tri04:0 msec
2996: Tri05:0 msec
2998: Tri06:0 msec
3003: Tri07:0 msec
3005: Tri08:0 msec
3006: Tri09:0 msec
3009: Tri10:0 msec
3014: Tri11:0 msec
3017: Tri12:0 msec
3019: Tri13:0 msec
3021: Tri14:0 msec
3023: Tri15:0 msec
3027: Tri16:0 msec
3028: Tri17:0 msec
3032: Tri18:0 msec
3034: Tri19:0 msec
3036: 画面モード変更処理は正常に終了しました
3043: オーバーレイサーフェスは使用しません
3046: DirectDraw 関連の初期化は正常に終了しました
3070: 文字コードバッファの初期化を行います... 完了しました
7141: DirectDraw 関連の終了処理をおこないます
7144: フォントの初期化を行います
7152: フォントの初期化は正常に終了しました
7154: グラフィック管理系の終了処理は正常に終了しました
7159: メインサーフェスを破棄をします... 完了しました
7162: DirectDrawオブジェクトを解放します
7167: DirectDrawオブジェクトを解放しました
7169: DirectDraw 関連の終了処理は正常に終了しました
7171: DirectInput 関連の終了処理... 完了
7190: DirectSound の終了処理は正常に終了しました
7193: ウインドウを閉じようとしています
7248: ウインドウが破棄されようとしています
7265: ソフトを終了する準備が整いました
8163:
8164: Alloc memory dump Total size:0(0.000kb) Alloc num:0
8170:
Re:ゲームプログラミング
>「現在の画面モードで使用できる描画デバイスが見つかりませんでした」
このエラーは DxLibの内部で使われている DirectXの初期化(デバイスの列挙)時に
失敗したときのメッセージですね。
どうして失敗したのかはわかりませんが・・・。
>ただ、水色ではなく白で表示されました
なるほど。
色の問題はわかりません。それについては本家のBBSで訊いた方がいいと思います。
では、それは削除して元に戻した上で、代わりにSetNotUse3DFlag(FALSE)ではどうなりますか?
やっぱり同じように動くことは動くけど、色が・・・でしょうか?
>なぜこの関数を使うと、成功したのでしょうか
DirectDrawを使わないで描画するようになります。
3D機能がオフになり、VRAMを使用しなくなります。
その為パフォーマンスが落ちるかもしれませんが、互換性が上がるらしいです。
このエラーは DxLibの内部で使われている DirectXの初期化(デバイスの列挙)時に
失敗したときのメッセージですね。
どうして失敗したのかはわかりませんが・・・。
>ただ、水色ではなく白で表示されました
なるほど。
色の問題はわかりません。それについては本家のBBSで訊いた方がいいと思います。
では、それは削除して元に戻した上で、代わりにSetNotUse3DFlag(FALSE)ではどうなりますか?
やっぱり同じように動くことは動くけど、色が・・・でしょうか?
>なぜこの関数を使うと、成功したのでしょうか
DirectDrawを使わないで描画するようになります。
3D機能がオフになり、VRAMを使用しなくなります。
その為パフォーマンスが落ちるかもしれませんが、互換性が上がるらしいです。
Re:ゲームプログラミング
回答ありがとうございますm(_ _)m
>このエラーは DxLibの内部で使われている DirectXの初期化(デバイスの列挙)時に
>失敗したときのメッセージですね。
深く調べていくと、どうやらグラフィックカードがおかしいらしいです。
それ以上はわかりませんでしたが、これからも調べていきたいと思います。
>代わりにSetNotUse3DFlag(FALSE)ではどうなりますか?
WaitKey()は、働いていますが、四角形は表示されませんでした。
>DirectDrawを使わないで描画するようになります。
>3D機能がオフになり、VRAMを使用しなくなります。
ということは、DirectXの初期化に成功しないと3D機能は利用できないということですね。
親切な回答ありがとうございましたm(_ _)m
>このエラーは DxLibの内部で使われている DirectXの初期化(デバイスの列挙)時に
>失敗したときのメッセージですね。
深く調べていくと、どうやらグラフィックカードがおかしいらしいです。
それ以上はわかりませんでしたが、これからも調べていきたいと思います。
>代わりにSetNotUse3DFlag(FALSE)ではどうなりますか?
WaitKey()は、働いていますが、四角形は表示されませんでした。
>DirectDrawを使わないで描画するようになります。
>3D機能がオフになり、VRAMを使用しなくなります。
ということは、DirectXの初期化に成功しないと3D機能は利用できないということですね。
親切な回答ありがとうございましたm(_ _)m