ページ 11

_kbhit()のようなキー操作

Posted: 2022年3月23日(水) 17:52
by cupa
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];
		}
	}
}

...
(中略)
...

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

Posted: 2022年3月23日(水) 20:03
by みけCAT
now_on_key が char 型なので、60fpsの時約2秒を超えて長押しすると誤動作する可能性がありますが、
他は間違いを見つけられませんでした。
(見落としがあったらごめんなさい)

MonitoringKey() を1フレームに複数回呼び出すなど、提示されていないコードに間違いがある疑いがあります。