ページ 11

DXライブラリについて

Posted: 2007年10月28日(日) 12:54
by 新米
Borland C++コンパイラーとDXライブラリにて下記のプログラムをメイクし実行しました。
しかしウインドウは開くのですが何もキーを入力していないにもかかわらず勝手にウインドウが閉じてしまいます。
なぜだかまったく分かりません。どなたか教えていただけないでしょうか?使用OSはWindows98です。
#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了



WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}

Re:DXライブラリについて

Posted: 2007年10月28日(日) 15:37
by よっつん
こんにちは。
私の環境でもWaitKey()は上手く動きません。
以前は普通につかえていたのですが、最近、キー入力しても認識しなくなりました。
(余談ですが他にも、表画面に描画しても反映されないとかもあります。)
環境依存なのかなと推測していますが、よくわかりません(汗

while( CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ){WaitTimer(100);}

などで代用してみるのも手かもしれません。
(コードを訂正しました。)

Re:DXライブラリについて

Posted: 2007年10月28日(日) 16:09
by 新米
ご回答ありがとうございます。よっつんさんに教えていただいた通り入力してみましたが
やっぱりだめでした。もしかしたらDXライブラリ初期化時に何かエラーが起こっているの
かとも考えられるんですが。

Re:DXライブラリについて

Posted: 2007年10月28日(日) 23:57
by tk-xleader
> while( CheckHitKey( KEY_INPUT_ESCAPE ) == 1 ){WaitTimer(100);}

このコードだとどうやっても止まらないような気がします。押すまでループを回したい訳ですので、
CheckHitKey(KEY_INPUT_ESCAPE)の戻り値が0(押されていない)だと真に、1(押されている)だと偽になるように条件式を書く必要があります。
そこで、1のところを0にするといいかもしれません。

どうしても解決しない場合、Dxライブラリ管理人の山田 巧氏に報告するのがいいと思います。

Re:DXライブラリについて

Posted: 2007年10月29日(月) 00:32
by バグ
Windows98という事ですが、DirectXのバージョン違いとかいう可能性はありませんか?

Re:DXライブラリについて

Posted: 2007年10月29日(月) 00:53
by よっつん
間違ったコードで申し訳ありません
m(__)mご指摘ありがとうございます。

Re:DXライブラリについて

Posted: 2007年10月29日(月) 01:53
by tk-xleader
バグさんの回答に補足

Dxライブラリの最低保障環境はWindows98となっています。なので、OS自体に問題はないと思います。
ただ、Win98の初期バージョンに入っているDirectXのバージョンが気になるところです。
Win98の初期バージョンのDirectXは5のようなので、7~8.1あたりをインストールするのもいいかもしれません。
確かDxライブラリはDirectX7あたりのはずです。

Re:DXライブラリについて

Posted: 2007年10月29日(月) 10:29
by GPGA
出力されたログファイルの内容を提示してもらうのが一番早いと思います。
個人的な予想では、OSがwindows98であるため、グラフィックカードもそれほど性能が
良いものではないでしょうから、3Dの初期化時に失敗していると思われます。

DxLib_Init()を呼び出す前に SetUse3DFlag(FALSE) を呼べば動くのではないでしょうか。

Re:DXライブラリについて

Posted: 2007年10月29日(月) 22:49
by 新米
皆さんたくさんの回答ありがとうございます。熟練のプログラマーさんの言われた通りログファイルのコピーを載せます。私は見てもよく分かりません。どなたか分かる方教えていただけませんでしょうか?

1:システムの情報を出力します
18: DXライブラリ Ver2.21a
19: OS Windows98 ( Build 67766222 )
520: CPU動作速度:264MHz
521: MMX命令を使用します
522: CPUベンダ:GenuineIntel
525:COMの初期化... 成功しました
817:ソフトの2重起動検査... 2重起動はされていませんでした
822:メモリ総量:63.03MB 空きメモリ領域:7.34MB
823:ソフトの実行優先レベルを上げました
824:ウインドウクラスを登録します... 登録に成功しました
825:ウインドウモード起動用のウインドウを作成します
914:IMEを無効にしました
968:タイマーの精度を検査します
1634:精度結果 更新回数 マルチメディアタイマー:4 パフォーマンスカウンター:60
1634:パフォーマンスカウンターを使用します タイマー分解能 : 1193.180000 KHz
1835:ウインドウスタイルをウインドウモード用に変更します... 完了
1840:DirectInput関係初期化処理
1840: DirectInputオブジェクトの取得中... 取得に失敗
2293: ウインドウを閉じようとしています
2374: ウインドウが破棄されようとしています
2375: ソフトを終了する準備が整いました
2861:
2861: Alloc memory dump
2862: Total size:0(0.000kb) Alloc num:0
2863:

Re:DXライブラリについて

Posted: 2007年10月29日(月) 23:43
by tk-xleader
1840の所に注目してください。DirectInput(キー入力とかの機能部)の初期化に失敗してます。

メモリの総量も空きもかなり少ないように思います。もしやメモリ不足で失敗しているのかも。

Re:DXライブラリについて

Posted: 2007年10月30日(火) 00:19
by 新米
回答ありがとうございます。
DirectInput(キー入力とかの機能部)の初期化に失敗してます。
↑これはいったいどうすれば直るのでしょうか?またメモリ不足
はどうやって解消すれば言いのでしょうか?初歩的な質問ですみません。

Re:DXライブラリについて

Posted: 2007年10月30日(火) 07:34
by tk-xleader
初期化の失敗の解決法はどうにも思いつきませんが、メモリであれば、手っ取り早い順から…

1 起動しているソフトを終了させる。
2 パソコンにメモリを増設する。
3 パソコンそのものを買い換える。

といったものなのですが、2,3はさすがにやりすぎになりそうです(笑)

Re:DXライブラリについて

Posted: 2007年10月30日(火) 23:25
by よっつん
半分自己レスですが、
ジョイスティックなどが入力しっぱなしの状態だと、
WaitKey()は反応しないそうです。
一度ボタンを離すと反応します。
うちのPCは、ジョイスティックが入力しっぱなしになってました・・・
最近新しいのを買ったんですが、それが原因でした。

Re:DXライブラリについて

Posted: 2007年10月31日(水) 00:25
by 新米
回答ありがとうございます。
起動しているソフトを終了してから実行してみましたがやはり
ウインドウはすぐに閉じてしまいました。

Re:DXライブラリについて

Posted: 2007年11月02日(金) 00:15
by 新米
もしかしてDXライブラリのバージョンが低いのが原因ではないかと考え最新のバージョン
をダウンロードして実行してみたらやっぱり変わらない結果になりました。そのときの
ログファイルはこれです。結局何もせずウインドウが閉じてしまいました。
どうしたらいいのかまったく分かりませんどなたか教えていただけないでしょうか?

11:システムの情報を出力します
33: DXライブラリ Ver2.23
33: OS Windows98 ( Build 67766222 )
135: CPU動作速度:大体0.26GHz
136: MMX命令を使用します
137: CPUベンダ:GenuineIntel
141:COMの初期化... 成功しました
672:メモリ総量:63.03MB 空きメモリ領域:34.68MB
674:タイマーの精度を検査します
680:精度結果 更新回数 マルチメディアタイマー:3 パフォーマンスカウンター:60
681: パフォーマンスカウンターを使用します タイマー分解能 : 1193.180000 KHz
682: ソフトの二重起動検査... 二重起動はされていませんでした
741:ウインドウクラスを登録します... 登録に成功しました
743:ウインドウモード起動用のウインドウを作成します
938:IMEを無効にしました
2345:ウインドウスタイルをウインドウモード用に変更します... 完了
2372:DirectInput関係初期化処理
2373: DirectInput7 の取得中... 取得に失敗。
3043: エラーコード 0x80004002

3044: DirectInput8 の取得を試みます...取得に失敗。DirectInput を使用しません。
3415: パッドの数は 0 個です

3416:入力関連の初期化をしました
3430:DirectSound の初期化を行います
3431:DirectSound インターフェースの取得を行います.... 成功
4183:引き続きインターフェースの初期化処理... 成功
5580:DirectSoundのプライマリサウンドバッファの作成に失敗しました
5640:DirectDraw 関連の初期化を行います
5640: DirectDraw オブジェクトの取得を行います.... オブジェクトの取得に失敗しました
5683: DirectDrawオブジェクトの作成に失敗しました
5685: DirectDraw 関連の終了処理をおこないます

                   ~  中略(同じ処理がかなり何回も続くため)  ~

14921:DirectDraw 関連の終了処理をおこないます
14922:DirectDrawオブジェクトを解放します
14923:DirectDrawオブジェクトを解放しました
15078:DirectDrawオブジェクトを解放します
15079:DirectDrawオブジェクトを解放しました
15079:DirectDraw オブジェクトの取得を行います.... オブジェクトの取得に失敗しました
15097:DirectDraw オブジェクトの作成処理時にエラーが発生しました
15099:DirectDraw 関連の終了処理をおこないます
15100:DirectDrawオブジェクトを解放します
15100:DirectDrawオブジェクトを解放しました
15231:画面モードを元に戻す処理は正常に終了しました
15232:DirectDraw 関連の終了処理は正常に終了しました
15280:ウインドウを閉じようとしています
15326:ウインドウが破棄されようとしています
15327:ソフトを終了する準備が整いました
15475:
15476: Alloc memory dump Total size:0(0.000kb) Alloc num:0
15477:

Re:DXライブラリについて

Posted: 2007年11月02日(金) 02:45
by Justy
 何日か前に tkmakwins15さんが書いていますが、DirectXのバージョンを確認して下さい。
 ver7以降が入っていないとDXライブラリは使えません。

Re:DXライブラリについて

Posted: 2007年11月03日(土) 13:54
by 新米
DirectXのバージョンを新しくしたところ何とか正常に起動しました。
皆さん何度も親切に回答していただきありがとうございました。