_kbhit()のようなキー操作

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

_kbhit()のようなキー操作

#1

投稿記事 by cupa » 2年前

1ヶ月前ぐらいに、同じような質問をしたのですがそれを参考に他のゲームでも活かそうとして(よく使うので)
下記のようなコードをかいてみたのですが、一瞬押されたとき1座標を動かす、というのがうまくいっていません。
長押しした時に連続で動く、という処理はうまくいったのですが・・・

main.cpp

コード:

#include "DxLib.h"

...
(中略)
...

const int LONG_ON_KEY_TIME   = 25;
const int MINO_MOVE_INTERVAL = 3; 

...
(中略)
...

int mino_x, mino_y, mino_ang, mino_type;
char all_key[256], now_on_key[256]; //すべてのキー、現在押されているキー

int  MonitoringKey();
void OnKeyDown();

...
(中略)
...

int MonitoringKey() {
	GetHitKeyStateAll(all_key);
	for (int i = 0; i < 256; i++) {
		if (all_key[i] == 1) {
			now_on_key[i]++;
		} else {
			now_on_key[i] = 0;
		}
	}
	return 0;
}

void OnKeyDown() {
	int keys[4] = {KEY_INPUT_UP, KEY_INPUT_LEFT, KEY_INPUT_DOWN, KEY_INPUT_RIGHT};
	int move_x[4] = {0, -1, 0, 1}, move_y[4] = {-1, 0, 1, 0};

	MonitoringKey();
	for (byte i = 0; i < 4; i++) {
		if (now_on_key[keys[i]] == 1 || (now_on_key[keys[i]] >= LONG_ON_KEY_TIME && (now_on_key[keys[i]] - LONG_ON_KEY_TIME) % MINO_MOVE_INTERVAL == 0)) {
			mino_x += move_x[i], mino_y += move_y[i];
		}
	}
}

...
(中略)
...

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: _kbhit()のようなキー操作

#2

投稿記事 by みけCAT » 2年前

now_on_key が char 型なので、60fpsの時約2秒を超えて長押しすると誤動作する可能性がありますが、
他は間違いを見つけられませんでした。
(見落としがあったらごめんなさい)

MonitoringKey() を1フレームに複数回呼び出すなど、提示されていないコードに間違いがある疑いがあります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

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