ご質問があります。

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

ご質問があります。

#1

投稿記事 by » 16年前

はじめまして。こんにちは。寺といいます。よろしくお願いします。

ご質問があります。

類似既存スレが存在していたらごめんなさい。

つい最近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になれていないためこんな初心的な質問をしてすみません。

Justy

Re:ご質問があります。

#2

投稿記事 by Justy » 16年前

[color=#9370db">[/color]
>ソースコードはミスしていなかったので

 多分そのソースコードにミスがあります。
 しかし、ソースがないので具体体にどこに問題があるのかはわかりません。
 
 察するに ProcessMessage()とか GetHitKeyStateAll()を定期的に呼び出していない、
ってところではないでしょうか。

Re:ご質問があります。

#3

投稿記事 by » 16年前

返信ありがとうございます。

身近な関数でいうと

CheckHitKeyAll  
CheckHitKey  
GetHitKeyStateAll
WaitKey

等を単体で呼びだしてもうまく処理してくれなく

ゲームプログラミングの館のソースコードを使ってもうまくいっていないのでコードのミス以前の問題だと思います。

あと起こっている事象として龍神録のソースコードをコピペしてCheckStatePadを使った場合パッドのほうの操作しか受け付けてくれません。KEY_INPUT_UPをKEY_INPUT_Zとかに変えた場合、ちゃんとZキーの操作を受け付けてくれます。

ねこ

Re:ご質問があります。

#4

投稿記事 by ねこ » 16年前

ループしている処理の中に以下のソースを加えて、各キーを押しても反応しないということですか?
だとしたらドライバとかの問題になるのかな。。。
そのあたりは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:ご質問があります。

#5

投稿記事 by » 16年前

上記のソースコードをループに加えてみました。

結果としてOutputDebugString関数においてKEY_INPUT_LSHIFTとKEY_INPUT_SPACEは機能しましたが、他のキーは機能しませんでした。

一方

CheckHitKeyAll  
CheckHitKey  
GetHitKeyStateAll
WaitKey

ではSPACEキーは反応しLSHIFTキーは反応しませんでした。

個人的に調べてわかったことが一つあるのですが、龍神録のソースファイル、ヘッダーファイルを全部消して自分の.cpp .hに置き換えてみるとなぜかうまく反応してくれないキーが反応してくれました。そこで以前と何が異なるかvisual studioの各設定、及び機能を模索していると龍神録のソリューション内にあるリソースファイルの存在が異なるので一度ソリューションからリソースファイルを削除し実行してみるといままでどおり一部のキーが機能しなくなりました。つまり原因はDxLibに関する.h .libであるところまではわかりました。

しかしなぜかはまだわかりません。

dic

Re:ご質問があります。

#6

投稿記事 by dic » 16年前

似たような体験で
キーボードが壊れてたという経験が私にはあります

コーヒーをキーボードにやっちゃいまして

ねこ

Re:ご質問があります。

#7

投稿記事 by ねこ » 16年前

以下のサイトあたりから「キーボードの入力キーコード」をチェックしてみてください。
このへんでちゃんと入力が取れていたら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:ご質問があります。

#8

投稿記事 by » 16年前

ご返答ありがとうございます。

個人的な問題は残っていますが疑問は解決しました。

まず自身のPCのキー入力は正常でした。

ここで自身の作ったプログラムをOSがXPの別のPC(現在はvista)で実行させてみるとうまく処理されていました。

つまりPCの問題でした。

ただ龍神録のプログラムではうまくいっていたので現在DXライブラリVer2.25bを使っていたのですが今後は別のVerでなんとか今のPCで実行できるよう模索していこうと思います。

思えば現在のPCで龍神録のダウンロード及び龍神録を正常にインストールできなかったんですよね。実行してみるとキー操作がめちゃめちゃのプログラムになってて…しかたなくXPのPCでインストールしたデータを持ってきたんですが…よくPCゲームであるvistaは規格外ってやつなんですかね…

とりあえず現在のPCでの正常起動ができないと個人的に困るんでがんばっていきます。

しかし疑問のほうは解決しました。

どうも、ありがとうございました。

Re:ご質問があります。

#9

投稿記事 by » 16年前

解決しました。

閉鎖

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