ゲームプログラミング

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たのもー

ゲームプログラミング

#1

投稿記事 by たのもー » 18年前

こんにちは。 
今回は、ゲームプログラミングに関することです。
以下のソースをメイクし、実行するとウィンドウが開き、
水色の四角形が現れ、適当なキーを押すと終了するようなのですが、
私の場合、ウィンドウは開きますが水色の四角形など表れませんし、
キーを押しても終了せず、しばらくすると勝手に消えてしまいます。
メイクは普通にできます。
これを解消するにはどうすればよいのですか?
ご意見よろしくお願いします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);
}

Justy

Re:ゲームプログラミング

#2

投稿記事 by Justy » 18年前

 WaitKey()の前に ScreenFlip()を入れたらどうなりますか?

たのもー

Re:ゲームプログラミング

#3

投稿記事 by たのもー » 18年前

Justyさん、お返事ありがとうございます。
何度も試してみましたが以前となんら変わりはありません。

Justy

Re:ゲームプログラミング

#4

投稿記事 by Justy » 18年前

 となると

・ DrawBoxの行は実行されていますか?
 デバッガでブレークをかけるか、OutputDebugString()で何か出力するとか、どういう方法でもいいのですが
その行が確実に実行されていることを確かめて下さい。
(つまり DxLib_Init()に失敗して、-1が戻った為にその後の行が実行されなかったのでは
ないか、ということです)


・ ログはどうなっていますか?
 どこかに Log.txtというファイルが出来ていると思います。
 このログのどこかでエラーの記述があったりしませんか?


・ SetUseDirectDrawFlag関数を使う
  DxLib_Init()より前に SetUseDirectDrawFlag(FALSE)の1行を入れてみて下さい。

たのもー

Re:ゲームプログラミング

#5

投稿記事 by たのもー » 18年前

丁寧なお返事ありがとうございます。

>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:

Justy

Re:ゲームプログラミング

#6

投稿記事 by Justy » 18年前

>「現在の画面モードで使用できる描画デバイスが見つかりませんでした」
 このエラーは DxLibの内部で使われている DirectXの初期化(デバイスの列挙)時に
失敗したときのメッセージですね。
 どうして失敗したのかはわかりませんが・・・。


>ただ、水色ではなく白で表示されました
 なるほど。
 色の問題はわかりません。それについては本家のBBSで訊いた方がいいと思います。

 では、それは削除して元に戻した上で、代わりにSetNotUse3DFlag(FALSE)ではどうなりますか?
 やっぱり同じように動くことは動くけど、色が・・・でしょうか?


>なぜこの関数を使うと、成功したのでしょうか
 DirectDrawを使わないで描画するようになります。
 3D機能がオフになり、VRAMを使用しなくなります。
 その為パフォーマンスが落ちるかもしれませんが、互換性が上がるらしいです。

たのもー

Re:ゲームプログラミング

#7

投稿記事 by たのもー » 18年前

回答ありがとうございますm(_ _)m

>このエラーは DxLibの内部で使われている DirectXの初期化(デバイスの列挙)時に
>失敗したときのメッセージですね。

深く調べていくと、どうやらグラフィックカードがおかしいらしいです。
それ以上はわかりませんでしたが、これからも調べていきたいと思います。



>代わりにSetNotUse3DFlag(FALSE)ではどうなりますか?

WaitKey()は、働いていますが、四角形は表示されませんでした。



>DirectDrawを使わないで描画するようになります。
>3D機能がオフになり、VRAMを使用しなくなります。

ということは、DirectXの初期化に成功しないと3D機能は利用できないということですね。



親切な回答ありがとうございましたm(_ _)m

閉鎖

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