はじめまして。こんにちは。寺といいます。よろしくお願いします。
ご質問があります。
類似既存スレが存在していたらごめんなさい。
つい最近DXライブラリの存在を知り、大学の講義の足しになればと思いいじっているのですが、
DXライブラリ内で定義されてるキーボード入力関連関数、及びその自作関数において
一部のキーの入力を受け付けてくれません。
具体的に
KEY_INPUT_LSHIFT KEY_INPUT_RSHIFT
KEY_INPUT_LCONTROL KEY_INPUT_RCONTROL
KEY_INPUT_ESCAPE KEY_INPUT_SPACE
KEY_INPUT_PGUP KEY_INPUT_PGDN
KEY_INPUT_END KEY_INPUT_HOME
KEY_INPUT_LEFT KEY_INPUT_UP
KEY_INPUT_RIGHT KEY_INPUT_DOWN
KEY_INPUT_INSERT KEY_INPUT_DELETE
の処理を受け付けてくれません。
疑問に思い龍神録のキー処理のプログラムをビルドしてみると(この場合
KEY_INPUT_LEFT KEY_INPUT_UP
KEY_INPUT_RIGHT KEY_INPUT_DOWN )
こちらは正常に機能していました。ソースコードはミスしていなかったのでvisual studioのDXライブラリの初期設定でミスしたのかと思いかれこれ十数時間過ごしたのですが結局わかりません。
コンパイラはvisual studio2008 professional editionです。
visual studioになれていないためこんな初心的な質問をしてすみません。
ご質問があります。
Re:ご質問があります。
[color=#9370db">[/color]
>ソースコードはミスしていなかったので
多分そのソースコードにミスがあります。
しかし、ソースがないので具体体にどこに問題があるのかはわかりません。
察するに ProcessMessage()とか GetHitKeyStateAll()を定期的に呼び出していない、
ってところではないでしょうか。
>ソースコードはミスしていなかったので
多分そのソースコードにミスがあります。
しかし、ソースがないので具体体にどこに問題があるのかはわかりません。
察するに ProcessMessage()とか GetHitKeyStateAll()を定期的に呼び出していない、
ってところではないでしょうか。
Re:ご質問があります。
返信ありがとうございます。
身近な関数でいうと
CheckHitKeyAll
CheckHitKey
GetHitKeyStateAll
WaitKey
等を単体で呼びだしてもうまく処理してくれなく
ゲームプログラミングの館のソースコードを使ってもうまくいっていないのでコードのミス以前の問題だと思います。
あと起こっている事象として龍神録のソースコードをコピペしてCheckStatePadを使った場合パッドのほうの操作しか受け付けてくれません。KEY_INPUT_UPをKEY_INPUT_Zとかに変えた場合、ちゃんとZキーの操作を受け付けてくれます。
身近な関数でいうと
CheckHitKeyAll
CheckHitKey
GetHitKeyStateAll
WaitKey
等を単体で呼びだしてもうまく処理してくれなく
ゲームプログラミングの館のソースコードを使ってもうまくいっていないのでコードのミス以前の問題だと思います。
あと起こっている事象として龍神録のソースコードをコピペしてCheckStatePadを使った場合パッドのほうの操作しか受け付けてくれません。KEY_INPUT_UPをKEY_INPUT_Zとかに変えた場合、ちゃんとZキーの操作を受け付けてくれます。
Re:ご質問があります。
ループしている処理の中に以下のソースを加えて、各キーを押しても反応しないということですか?
だとしたらドライバとかの問題になるのかな。。。
そのあたりはDxLib本家のBBSで使用しているOS,キーボード等の情報を添えて管理人さんに聞いてみると良いかもしれません。
だとしたらドライバとかの問題になるのかな。。。
そのあたりはDxLib本家のBBSで使用しているOS,キーボード等の情報を添えて管理人さんに聞いてみると良いかもしれません。
// キーの取得 char cKey[ 256 ]; memset( cKey ,0 ,sizeof( cKey ) ); GetHitKeyStateAll( cKey ); if( cKey[ KEY_INPUT_LSHIFT ] ) { // 左SHIFT OutputDebugString( "KEY_INPUT_LSHIFT\n" ); } else if( cKey[ KEY_INPUT_RSHIFT ] ) { // 右SHIFT OutputDebugString( "KEY_INPUT_RSHIFT\n" ); } else if( cKey[ KEY_INPUT_LCONTROL ] ) { // 左CTRL OutputDebugString( "KEY_INPUT_LCONTROL\n" ); } else if( cKey[ KEY_INPUT_RCONTROL ] ) { // 右CTRL OutputDebugString( "KEY_INPUT_RCONTROL\n" ); } else if( cKey[ KEY_INPUT_SPACE ] ) { // SPACE OutputDebugString( "KEY_INPUT_SPACE\n" ); }
Re:ご質問があります。
上記のソースコードをループに加えてみました。
結果としてOutputDebugString関数においてKEY_INPUT_LSHIFTとKEY_INPUT_SPACEは機能しましたが、他のキーは機能しませんでした。
一方
CheckHitKeyAll
CheckHitKey
GetHitKeyStateAll
WaitKey
ではSPACEキーは反応しLSHIFTキーは反応しませんでした。
個人的に調べてわかったことが一つあるのですが、龍神録のソースファイル、ヘッダーファイルを全部消して自分の.cpp .hに置き換えてみるとなぜかうまく反応してくれないキーが反応してくれました。そこで以前と何が異なるかvisual studioの各設定、及び機能を模索していると龍神録のソリューション内にあるリソースファイルの存在が異なるので一度ソリューションからリソースファイルを削除し実行してみるといままでどおり一部のキーが機能しなくなりました。つまり原因はDxLibに関する.h .libであるところまではわかりました。
しかしなぜかはまだわかりません。
結果としてOutputDebugString関数においてKEY_INPUT_LSHIFTとKEY_INPUT_SPACEは機能しましたが、他のキーは機能しませんでした。
一方
CheckHitKeyAll
CheckHitKey
GetHitKeyStateAll
WaitKey
ではSPACEキーは反応しLSHIFTキーは反応しませんでした。
個人的に調べてわかったことが一つあるのですが、龍神録のソースファイル、ヘッダーファイルを全部消して自分の.cpp .hに置き換えてみるとなぜかうまく反応してくれないキーが反応してくれました。そこで以前と何が異なるかvisual studioの各設定、及び機能を模索していると龍神録のソリューション内にあるリソースファイルの存在が異なるので一度ソリューションからリソースファイルを削除し実行してみるといままでどおり一部のキーが機能しなくなりました。つまり原因はDxLibに関する.h .libであるところまではわかりました。
しかしなぜかはまだわかりません。
Re:ご質問があります。
以下のサイトあたりから「キーボードの入力キーコード」をチェックしてみてください。
このへんでちゃんと入力が取れていたらDxLib側に何か不具合があるのかもしれませんね。
// 1番上のツール
ttp://www.geocities.co.jp/SiliconValley-Oakland/2489/soft/soft1.htm
// 下の方のFLASH
ttp://hakuhin.hp.infoseek.co.jp/main/as3/key_board.html
また、本来DxLibを使わない場合は以下のようなプロセスでキー入力を取得したりします。
余力あったら試してみても良いかもです。
このへんでちゃんと入力が取れていたらDxLib側に何か不具合があるのかもしれませんね。
// 1番上のツール
ttp://www.geocities.co.jp/SiliconValley-Oakland/2489/soft/soft1.htm
// 下の方のFLASH
ttp://hakuhin.hp.infoseek.co.jp/main/as3/key_board.html
また、本来DxLibを使わない場合は以下のようなプロセスでキー入力を取得したりします。
余力あったら試してみても良いかもです。
// ウィンドウプロシージャ LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp ) { switch ( msg ) { case WM_CLOSE: // ウインドウが閉じられた( アプリケーションを終了する ) PostQuitMessage( 0 ); break; case WM_KEYDOWN: // キースクリプト return 0; case WM_KEYUP: // キーアップ return 0; } }
Re:ご質問があります。
ご返答ありがとうございます。
個人的な問題は残っていますが疑問は解決しました。
まず自身のPCのキー入力は正常でした。
ここで自身の作ったプログラムをOSがXPの別のPC(現在はvista)で実行させてみるとうまく処理されていました。
つまりPCの問題でした。
ただ龍神録のプログラムではうまくいっていたので現在DXライブラリVer2.25bを使っていたのですが今後は別のVerでなんとか今のPCで実行できるよう模索していこうと思います。
思えば現在のPCで龍神録のダウンロード及び龍神録を正常にインストールできなかったんですよね。実行してみるとキー操作がめちゃめちゃのプログラムになってて…しかたなくXPのPCでインストールしたデータを持ってきたんですが…よくPCゲームであるvistaは規格外ってやつなんですかね…
とりあえず現在のPCでの正常起動ができないと個人的に困るんでがんばっていきます。
しかし疑問のほうは解決しました。
どうも、ありがとうございました。
個人的な問題は残っていますが疑問は解決しました。
まず自身のPCのキー入力は正常でした。
ここで自身の作ったプログラムをOSがXPの別のPC(現在はvista)で実行させてみるとうまく処理されていました。
つまりPCの問題でした。
ただ龍神録のプログラムではうまくいっていたので現在DXライブラリVer2.25bを使っていたのですが今後は別のVerでなんとか今のPCで実行できるよう模索していこうと思います。
思えば現在のPCで龍神録のダウンロード及び龍神録を正常にインストールできなかったんですよね。実行してみるとキー操作がめちゃめちゃのプログラムになってて…しかたなくXPのPCでインストールしたデータを持ってきたんですが…よくPCゲームであるvistaは規格外ってやつなんですかね…
とりあえず現在のPCでの正常起動ができないと個人的に困るんでがんばっていきます。
しかし疑問のほうは解決しました。
どうも、ありがとうございました。