特定のキーを同時に押すと反応しなくなる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
apricot
記事: 8
登録日時: 14年前

特定のキーを同時に押すと反応しなくなる

#1

投稿記事 by apricot » 13年前

 今、私は、Zキーを押すと赤い弾の出るボール(方向キーで動く)を
作りたいと思っています。
 ですが、なぜか下キーと、左右キーのどちらかを、同時に押しながら、
Zキーを押すと、弾が出てきません。
 コードはこれです。

コード:

#include "DxLib.h"

int Key[256];

typedef struct{
	int x,y,t[3][10],tf;
}Player;
Player p;

int	GetKey(int InputKey[]){
	char All_Key[256];
	GetHitKeyStateAll( All_Key );
	for(int i=0;i<256;i++){
		if(All_Key[i]==1)	InputKey[i]++;
		else			InputKey[i]=0;
	}
	return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
	ChangeWindowMode(TRUE);
	if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;

	int red=GetColor(255,0,0),white=GetColor(255,255,255),a,b;

	p.x=320;
	p.y=400;
	for(a=0;a<10;a++)
		for(b=0;b<3;b++)
			p.t[b][a]=0;
	p.tf=0;

    while(ProcessMessage()==0 && ClearDrawScreen()==0 &&
	GetKey(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){

		if(Key[KEY_INPUT_RIGHT]>0 && p.x<620)	p.x+=2;
		if(Key[KEY_INPUT_LEFT]>0 && p.x>20)	  p.x-=2;
		if(Key[KEY_INPUT_DOWN]>0 && p.y<460)	p.y+=1;
		if(Key[KEY_INPUT_UP]>0 && p.y>20)	  p.y-=2;
		
		if(p.tf>0)	p.tf--;
		for(a=0;a<10;a++){
			if(p.t[0][a]==0 && p.tf==0 && Key[KEY_INPUT_Z]>0){
				p.t[0][a]=1;
				p.t[1][a]=p.x;
				p.t[2][a]=p.y;
				p.tf=24;
			}else if(p.t[0][a]==1)
				if(p.t[2][a]<-5)
					for(b=0;b<3;b++)
						p.t[b][a]=0;
				else	p.t[2][a]-=8;
		}

		DrawBox(0,0,640,480,white,TRUE);
		DrawCircle(p.x,p.y,15,red,TRUE);
		for(a=0;a<10;a++)
			if(p.t[0][a]==1)
				DrawBox(p.t[1][a]-2,p.t[2][a]-5,p.t[1][a]+2,p.t[2][a]+5,red,TRUE);
			

		ScreenFlip();
	}

	DxLib_End();
	return 0;
}
今使っているのは、Vistaと、DXライブラリと、Visual C++ 2010 Expressです。
一応書いておきます。

ふりかけ

Re: 特定のキーを同時に押すと反応しなくなる

#2

投稿記事 by ふりかけ » 13年前

int Key[256]; や Player p; の宣言はWinMain内に書いた方がいいかなと思います
Player構造体のメンバ変数 tf は発射間隔とかでしょうか。コメントがほしいです。
t は弾かな、これは構造体の配列にしたほうが分かりやすそうです。

コード:

typedef struct ___tama{
       int flag, x, y;
} tama;

typedef struct ___Player{
       int x, y, tf;
       tama t[10];
} Player;
肝心のzキーのことですが、分かりません。キーボードによって同時押しできる数が決まってたりしますが、関係あるかなぁ?

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: 特定のキーを同時に押すと反応しなくなる

#3

投稿記事 by beatle » 13年前

メモ帳などのテキストエディタを使って、矢印キーを押しながらZキーを押してみれば何か分かるかもしれません。
エディタ上でさえZが入力できないなら、それはキーボード自体の制限の可能性があります。

史上最悪のデスペナ
記事: 521
登録日時: 14年前

Re: 特定のキーを同時に押すと反応しなくなる

#4

投稿記事 by 史上最悪のデスペナ » 13年前

DXLibは3つ以上のキー判定は出来ないってどっかで見たことある気がします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 特定のキーを同時に押すと反応しなくなる

#5

投稿記事 by softya(ソフト屋) » 13年前

史上最悪のデスペナ さんが書きました:DXLibは3つ以上のキー判定は出来ないってどっかで見たことある気がします。
それはDXLIBの制限ではなくキーボードの性能的制限です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

史上最悪のデスペナ
記事: 521
登録日時: 14年前

Re: 特定のキーを同時に押すと反応しなくなる

#6

投稿記事 by 史上最悪のデスペナ » 13年前

softya(ソフト屋) さんが書きました:それはDXLIBの制限ではなくキーボードの性能的制限です。
そうだったんですか。知らなかったです。お恥ずかしい^^;

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 特定のキーを同時に押すと反応しなくなる

#7

投稿記事 by softya(ソフト屋) » 13年前

史上最悪のデスペナ さんが書きました:
softya(ソフト屋) さんが書きました:それはDXLIBの制限ではなくキーボードの性能的制限です。
そうだったんですか。知らなかったです。お恥ずかしい^^;
普通のキーボードは特定のキーを除いて同時3つ押しをちゃんと検出できません。
それが出来るのはゲーム専用キーボードなど特殊なキーボードだけですね。

たぶん、いちばん安いのはマイクロソフトの「SideWinder X4 Keyboard」でしょうか。最大で26キー同時押しの対応です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: 特定のキーを同時に押すと反応しなくなる

#8

投稿記事 by beatle » 13年前

同時押しについて気になったので調べてみました。
http://wikiwiki.jp/fpag/?%A5%AD%A1%BC%A ... 4%A4%A4%C6
Nキーロールオーバーと「同時に押下されているキー数をいくつまで認識できるか」は厳密には関係がない。
だそうです。REALFORCEのUSB版が6キー同時押し対応なのと比べると、SideWinderがいかに凄いかが分かりますね。
あ、ちなみにPS/2版のREALFORCEなら全キー同時押し対応らしいですが。

史上最悪のデスペナ
記事: 521
登録日時: 14年前

Re: 特定のキーを同時に押すと反応しなくなる

#9

投稿記事 by 史上最悪のデスペナ » 13年前

26キー同時押しとか全キー同時押しって一体どんな状況なんでしょうw?
一つのキーボードを使って二人で格闘技対戦でも26も使わない気が・・・・・・

apricot
記事: 8
登録日時: 14年前

Re: 特定のキーを同時に押すと反応しなくなる

#10

投稿記事 by apricot » 13年前

 返信ありがとうございます。
 原因(と言っていいものか)が分かりました。
 どうやら、VC++2010EEか、ノートパソコンだったのが
悪かったらしく、家族共用のパソコンで起動してみると、普通に出来ました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 特定のキーを同時に押すと反応しなくなる

#11

投稿記事 by softya(ソフト屋) » 13年前

apricot さんが書きました: 返信ありがとうございます。
 原因(と言っていいものか)が分かりました。
 どうやら、VC++2010EEか、ノートパソコンだったのが
悪かったらしく、家族共用のパソコンで起動してみると、普通に出来ました。
VC++2010EEは考えられないと思いますので、ノートパソコンが原因だと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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