KisaragiLibrary
 
読み取り中…
検索中…
一致する文字列を見つけられません
KeyInput.hpp
[詳解]
1#pragma once
2
3#include <string>
4#include <DxLib.h>
5#include <unordered_set>
6#include <deque>
7
8
9
10using std::string;
11using std::unordered_set;
12using std::deque;
13
14namespace Kisaragi_Lib
15{
16 //ほすぃ機能
17 //一度だけ
18 //keyBuffer
19 //vector<map<KeyCode,bool>>keyBuffer;
20 //GetKeyInput (KeyNum ,何フレーム前のやつを受け付けるか?, )
21
22 /// <summary>
23 /// KeyCode列挙型
24 /// DirectInputのkeycodeです。
25 /// </summary>
26 enum class KeyCode
27 {
28 // 数値キー 0~9
29 KEY_0 = 0x0B,
30 KEY_1 = 0x02,
31 KEY_2 = 0x03,
32 KEY_3 = 0x04,
33 KEY_4 = 0x05,
34 KEY_5 = 0x06,
35 KEY_6 = 0x07,
36 KEY_7 = 0x08,
37 KEY_8 = 0x09,
38 KEY_9 = 0x0A,
39
40 // アルファベットキー A~Z
41 KEY_A = 0x1E,
42 KEY_B = 0x30,
43 KEY_C = 0x2E,
44 KEY_D = 0x20,
45 KEY_E = 0x12,
46 KEY_F = 0x21,
47 KEY_G = 0x22,
48 KEY_H = 0x23,
49 KEY_I = 0x17,
50 KEY_J = 0x24,
51 KEY_K = 0x25,
52 KEY_L = 0x26,
53 KEY_M = 0x32,
54 KEY_N = 0x31,
55 KEY_O = 0x18,
56 KEY_P = 0x19,
57 KEY_Q = 0x10,
58 KEY_R = 0x13,
59 KEY_S = 0x1F,
60 KEY_T = 0x14,
61 KEY_U = 0x16,
62 KEY_V = 0x2F,
63 KEY_W = 0x11,
64 KEY_X = 0x2D,
65 KEY_Y = 0x15,
66 KEY_Z = 0x2C,
67
68 // Numpadキー 0~9 + その他
79 KEY_NUMPADCOMMA = 0xB3, // , on numeric keypad
80 KEY_NUMPADEQUALS = 0x8D, // = on numeric keypad
81 KEY_NUMPADENTER = 0x9C, // Enter on numeric keypad
82 KEY_ADD = 0x4E, // + on numeric keypad
83 KEY_SUBTRACT = 0x4A, // - on numeric keypad
84 KEY_MULTIPLY = 0x37, // * on numeric keypad
85 KEY_DIVIDE = 0xB5, // / on numeric keypad
86 KEY_DECIMAL = 0x53, // . on numeric keypad
87
88 // 矢印キー
89 KEY_UP = 0xC8, // UpArrow on arrow keypad
90 KEY_DOWN = 0xD0, // DownArrow on arrow keypad
91 KEY_LEFT = 0xCB, // LeftArrow on arrow keypad
92 KEY_RIGHT = 0xCD, // RightArrow on arrow keypad
93
94 // 機能キー (F1 ~ F15)
95 KEY_F1 = 0x3B,
96 KEY_F2 = 0x3C,
97 KEY_F3 = 0x3D,
98 KEY_F4 = 0x3E,
99 KEY_F5 = 0x3F,
100 KEY_F6 = 0x40,
101 KEY_F7 = 0x41,
102 KEY_F8 = 0x42,
103 KEY_F9 = 0x43,
104 KEY_F10 = 0x44,
105 KEY_F11 = 0x57,
106 KEY_F12 = 0x58,
107 KEY_F13 = 0x64, // (NEC PC98)
108 KEY_F14 = 0x65, // (NEC PC98)
109 KEY_F15 = 0x66, // (NEC PC98)
110
111 // モディファイアキー
116 KEY_LMENU = 0x38, // Left Alt
117 KEY_RMENU = 0xB8, // Right Alt
118 KEY_LWIN = 0xDB, // Left Windows key
119 KEY_RWIN = 0xDC, // Right Windows key
120
121 // 特殊キー
123 KEY_TAB = 0x0F,
124 KEY_BACK = 0x0E, // Backspace
125 KEY_RETURN = 0x1C, // Enter on main keyboard
126 KEY_SPACE = 0x39,
127 KEY_CAPITAL = 0x3A, // Caps Lock
129 KEY_SCROLL = 0x46, // Scroll Lock
130 KEY_PAUSE = 0xC5, // Pause
131 KEY_SYSRQ = 0xB7, // Print Screen
132 KEY_INSERT = 0xD2, // Insert on arrow keypad
133 KEY_DELETE = 0xD3, // Delete on arrow keypad
134 KEY_HOME = 0xC7, // Home on arrow keypad
135 KEY_END = 0xCF, // End on arrow keypad
136 KEY_PRIOR = 0xC9, // Page Up on arrow keypad
137 KEY_NEXT = 0xD1, // Page Down on arrow keypad
138 KEY_APPS = 0xDD, // AppMenu key
139
140 // 記号・その他のキー
141 KEY_MINUS = 0x0C, // - on main keyboard
148 KEY_GRAVE = 0x29, // Accent grave (`)
149 KEY_COMMA = 0x33,
150 KEY_PERIOD = 0x34, // . on main keyboard
151 KEY_SLASH = 0x35, // / on main keyboard
152
153 // 日本語キーボード
154 KEY_KANA = 0x70, // (Japanese keyboard)
155 KEY_CONVERT = 0x79, // (Japanese keyboard)
156 KEY_NOCONVERT = 0x7B, // (Japanese keyboard)
157 KEY_YEN = 0x7D, // (Japanese keyboard)
158 KEY_KANJI = 0x94, // (Japanese keyboard)
159
160 // その他 (メディアやシステム関連のキー)
161 KEY_MUTE = 0xA0, // Mute
162 KEY_CALCULATOR = 0xA1, // Calculator
163 KEY_PLAYPAUSE = 0xA2, // Play / Pause
164 KEY_MEDIASTOP = 0xA4, // Media Stop
165 KEY_VOLUMEDOWN = 0xAE, // Volume -
166 KEY_VOLUMEUP = 0xB0, // Volume +
167 KEY_WEBHOME = 0xB2, // Web home
168 KEY_POWER = 0xDE, // System Power
169 KEY_SLEEP = 0xDF, // System Sleep
170 KEY_WAKE = 0xE3, // System Wake
171 KEY_WEBSEARCH = 0xE5, // Web Search
172 KEY_WEBFAVORITES = 0xE6, // Web Favorites
173 KEY_WEBREFRESH = 0xE7, // Web Refresh
174 KEY_WEBSTOP = 0xE8, // Web Stop
175 KEY_WEBFORWARD = 0xE9, // Web Forward
176 KEY_WEBBACK = 0xEA, // Web Back
177 KEY_MYCOMPUTER = 0xEB, // My Computer
178 KEY_MAIL = 0xEC, // Mail
179 KEY_MEDIASELECT = 0xED, // Media Select
180 KEY_PREVTRACK = 0x90, // Previous Track
181 KEY_NEXTTRACK = 0x99, // Next Track
182 KEY_STOP = 0x95, // (NEC PC98)
183 KEY_AT = 0x91, // (NEC PC98)
184 KEY_COLON = 0x92, // (NEC PC98)
185 KEY_UNDERLINE = 0x93, // (NEC PC98)
186 KEY_AX = 0x96, // (Japan AX)
187 KEY_UNLABELED = 0x97, // (J3100)
188
189 };
190
192 {
193 private:
194 //何フレーム前のキー入力情報を保持するか
195 unsigned int saveInputKeyHistorySize = 0;
196
197 deque<unordered_set<KeyCode>>keyBuffer;
198 public:
199
201 {
202 //余剰バッファ + 現在バッファ を確保
204 }
205
206 /// <summary>
207 /// Key入力を取得する
208 /// </summary>
209 void KeyCheck()
210 {
211 //現在のフレームのコンテナを追加.
212 keyBuffer.push_front(unordered_set<KeyCode>());
213
214 //コンテナ数が超えたら
215 if (keyBuffer.size() + 1 > saveInputKeyHistorySize)
216 {
217 //コンテナ削除.
218 keyBuffer.pop_back();
219 }
220
221 //入力取得用配列作成.
222 char buf[256];
223
224 //Key入力取得.
225 GetHitKeyStateAll(buf);
226
227 for (int i = 0; i < 256; i++)
228 {
229 //入力されているものを登録する.
230 if (buf[i] == 1)
231 {
232 //現在フレームのコンテナにkeyを登録する.
233 keyBuffer.front().insert((KeyCode)i);
234 }
235 }
236
237 }
238
239 bool KeyDown(const KeyCode& _key)
240 {
241 bool result = true;
242
243 //直前のフレームで押されているなら
244 if (keyBuffer[1].find(_key) != keyBuffer[1].end())
245 {
246 result = false;
247 }
248
249 //見つからない場合.
250 if (keyBuffer.front().find(_key) == keyBuffer.front().end())
251 {
252 result = false;
253 }
254
255 return result;
256 }
257
258 bool KeyHold(const KeyCode& _key)
259 {
260 bool result = true;
261
262 //見つからない場合.
263 if (keyBuffer.front().find(_key) == keyBuffer.front().end())
264 {
265 result = false;
266 }
267
268 return result;
269 }
270
271 bool KeyUp(const KeyCode& _key)
272 {
273 bool result = false;
274
275 //直前のフレームで押されているなら
276 if (keyBuffer[1].find(_key) != keyBuffer[1].end())
277 {
278 //見つからない場合(押されていないなら).
279 if (keyBuffer.front().find(_key) == keyBuffer.front().end())
280 {
281 result = true;
282 }
283 }
284
285 return result;
286 }
287
288
289
290 public:
291
292
293 };
294
299}
Definition KeyInput.hpp:192
bool KeyDown(const KeyCode &_key)
Definition KeyInput.hpp:239
KeyInput()
Definition KeyInput.hpp:200
void KeyCheck()
Key入力を取得する
Definition KeyInput.hpp:209
bool KeyHold(const KeyCode &_key)
Definition KeyInput.hpp:258
bool KeyUp(const KeyCode &_key)
Definition KeyInput.hpp:271
deque< unordered_set< KeyCode > > keyBuffer
Definition KeyInput.hpp:197
unsigned int saveInputKeyHistorySize
Definition KeyInput.hpp:195
static T & GetInstance()
T^̃CX^X擾.
Definition Singleton.hpp:39
Definition Accessor.hpp:110
KeyInput & GetKeyInput()
Definition KeyInput.hpp:295
KeyCode
KeyCode列挙型 DirectInputのkeycodeです。
Definition KeyInput.hpp:27
@ KEY_R
Definition KeyInput.hpp:58
@ KEY_AT
Definition KeyInput.hpp:183
@ KEY_END
Definition KeyInput.hpp:135
@ KEY_F13
Definition KeyInput.hpp:107
@ KEY_Y
Definition KeyInput.hpp:65
@ KEY_F1
Definition KeyInput.hpp:95
@ KEY_WEBFAVORITES
Definition KeyInput.hpp:172
@ KEY_WEBSEARCH
Definition KeyInput.hpp:171
@ KEY_F8
Definition KeyInput.hpp:102
@ KEY_NUMPAD6
Definition KeyInput.hpp:75
@ KEY_LMENU
Definition KeyInput.hpp:116
@ KEY_F4
Definition KeyInput.hpp:98
@ KEY_STOP
Definition KeyInput.hpp:182
@ KEY_GRAVE
Definition KeyInput.hpp:148
@ KEY_LEFT
Definition KeyInput.hpp:91
@ KEY_MYCOMPUTER
Definition KeyInput.hpp:177
@ KEY_NUMLOCK
Definition KeyInput.hpp:128
@ KEY_2
Definition KeyInput.hpp:31
@ KEY_WEBHOME
Definition KeyInput.hpp:167
@ KEY_MUTE
Definition KeyInput.hpp:161
@ KEY_WEBFORWARD
Definition KeyInput.hpp:175
@ KEY_B
Definition KeyInput.hpp:42
@ KEY_WEBREFRESH
Definition KeyInput.hpp:173
@ KEY_RMENU
Definition KeyInput.hpp:117
@ KEY_EQUALS
Definition KeyInput.hpp:142
@ KEY_F3
Definition KeyInput.hpp:97
@ KEY_F2
Definition KeyInput.hpp:96
@ KEY_PRIOR
Definition KeyInput.hpp:136
@ KEY_6
Definition KeyInput.hpp:35
@ KEY_G
Definition KeyInput.hpp:47
@ KEY_NUMPADCOMMA
Definition KeyInput.hpp:79
@ KEY_CAPITAL
Definition KeyInput.hpp:127
@ KEY_F14
Definition KeyInput.hpp:108
@ KEY_PLAYPAUSE
Definition KeyInput.hpp:163
@ KEY_RBRACKET
Definition KeyInput.hpp:144
@ KEY_LWIN
Definition KeyInput.hpp:118
@ KEY_MAIL
Definition KeyInput.hpp:178
@ KEY_SUBTRACT
Definition KeyInput.hpp:83
@ KEY_LSHIFT
Definition KeyInput.hpp:112
@ KEY_RWIN
Definition KeyInput.hpp:119
@ KEY_Z
Definition KeyInput.hpp:66
@ KEY_SCROLL
Definition KeyInput.hpp:129
@ KEY_LBRACKET
Definition KeyInput.hpp:143
@ KEY_NUMPAD4
Definition KeyInput.hpp:73
@ KEY_MINUS
Definition KeyInput.hpp:141
@ KEY_1
Definition KeyInput.hpp:30
@ KEY_WEBSTOP
Definition KeyInput.hpp:174
@ KEY_5
Definition KeyInput.hpp:34
@ KEY_PERIOD
Definition KeyInput.hpp:150
@ KEY_V
Definition KeyInput.hpp:62
@ KEY_NUMPAD9
Definition KeyInput.hpp:78
@ KEY_7
Definition KeyInput.hpp:36
@ KEY_T
Definition KeyInput.hpp:60
@ KEY_MULTIPLY
Definition KeyInput.hpp:84
@ KEY_DIVIDE
Definition KeyInput.hpp:85
@ KEY_A
Definition KeyInput.hpp:41
@ KEY_U
Definition KeyInput.hpp:61
@ KEY_SYSRQ
Definition KeyInput.hpp:131
@ KEY_APPS
Definition KeyInput.hpp:138
@ KEY_YEN
Definition KeyInput.hpp:157
@ KEY_NUMPAD0
Definition KeyInput.hpp:69
@ KEY_NOCONVERT
Definition KeyInput.hpp:156
@ KEY_KANJI
Definition KeyInput.hpp:158
@ KEY_UNLABELED
Definition KeyInput.hpp:187
@ KEY_TAB
Definition KeyInput.hpp:123
@ KEY_RETURN
Definition KeyInput.hpp:125
@ KEY_H
Definition KeyInput.hpp:48
@ KEY_ADD
Definition KeyInput.hpp:82
@ KEY_K
Definition KeyInput.hpp:51
@ KEY_Q
Definition KeyInput.hpp:57
@ KEY_AX
Definition KeyInput.hpp:186
@ KEY_0
Definition KeyInput.hpp:29
@ KEY_APOSTROPHE
Definition KeyInput.hpp:147
@ KEY_COMMA
Definition KeyInput.hpp:149
@ KEY_8
Definition KeyInput.hpp:37
@ KEY_NUMPADEQUALS
Definition KeyInput.hpp:80
@ KEY_N
Definition KeyInput.hpp:54
@ KEY_J
Definition KeyInput.hpp:50
@ KEY_RSHIFT
Definition KeyInput.hpp:113
@ KEY_RIGHT
Definition KeyInput.hpp:92
@ KEY_P
Definition KeyInput.hpp:56
@ KEY_SEMICOLON
Definition KeyInput.hpp:146
@ KEY_4
Definition KeyInput.hpp:33
@ KEY_VOLUMEUP
Definition KeyInput.hpp:166
@ KEY_F11
Definition KeyInput.hpp:105
@ KEY_F9
Definition KeyInput.hpp:103
@ KEY_C
Definition KeyInput.hpp:43
@ KEY_VOLUMEDOWN
Definition KeyInput.hpp:165
@ KEY_BACK
Definition KeyInput.hpp:124
@ KEY_DECIMAL
Definition KeyInput.hpp:86
@ KEY_PREVTRACK
Definition KeyInput.hpp:180
@ KEY_BACKSLASH
Definition KeyInput.hpp:145
@ KEY_UNDERLINE
Definition KeyInput.hpp:185
@ KEY_F10
Definition KeyInput.hpp:104
@ KEY_NUMPADENTER
Definition KeyInput.hpp:81
@ KEY_SLASH
Definition KeyInput.hpp:151
@ KEY_INSERT
Definition KeyInput.hpp:132
@ KEY_9
Definition KeyInput.hpp:38
@ KEY_E
Definition KeyInput.hpp:45
@ KEY_COLON
Definition KeyInput.hpp:184
@ KEY_NUMPAD8
Definition KeyInput.hpp:77
@ KEY_KANA
Definition KeyInput.hpp:154
@ KEY_CONVERT
Definition KeyInput.hpp:155
@ KEY_W
Definition KeyInput.hpp:63
@ KEY_F15
Definition KeyInput.hpp:109
@ KEY_S
Definition KeyInput.hpp:59
@ KEY_PAUSE
Definition KeyInput.hpp:130
@ KEY_WAKE
Definition KeyInput.hpp:170
@ KEY_3
Definition KeyInput.hpp:32
@ KEY_F12
Definition KeyInput.hpp:106
@ KEY_POWER
Definition KeyInput.hpp:168
@ KEY_UP
Definition KeyInput.hpp:89
@ KEY_M
Definition KeyInput.hpp:53
@ KEY_WEBBACK
Definition KeyInput.hpp:176
@ KEY_F6
Definition KeyInput.hpp:100
@ KEY_MEDIASTOP
Definition KeyInput.hpp:164
@ KEY_O
Definition KeyInput.hpp:55
@ KEY_ESCAPE
Definition KeyInput.hpp:122
@ KEY_RCONTROL
Definition KeyInput.hpp:115
@ KEY_I
Definition KeyInput.hpp:49
@ KEY_HOME
Definition KeyInput.hpp:134
@ KEY_CALCULATOR
Definition KeyInput.hpp:162
@ KEY_MEDIASELECT
Definition KeyInput.hpp:179
@ KEY_X
Definition KeyInput.hpp:64
@ KEY_SLEEP
Definition KeyInput.hpp:169
@ KEY_DOWN
Definition KeyInput.hpp:90
@ KEY_NEXTTRACK
Definition KeyInput.hpp:181
@ KEY_LCONTROL
Definition KeyInput.hpp:114
@ KEY_DELETE
Definition KeyInput.hpp:133
@ KEY_F5
Definition KeyInput.hpp:99
@ KEY_NEXT
Definition KeyInput.hpp:137
@ KEY_F
Definition KeyInput.hpp:46
@ KEY_NUMPAD3
Definition KeyInput.hpp:72
@ KEY_L
Definition KeyInput.hpp:52
@ KEY_NUMPAD7
Definition KeyInput.hpp:76
@ KEY_NUMPAD5
Definition KeyInput.hpp:74
@ KEY_NUMPAD1
Definition KeyInput.hpp:70
@ KEY_NUMPAD2
Definition KeyInput.hpp:71
@ KEY_SPACE
Definition KeyInput.hpp:126
@ KEY_F7
Definition KeyInput.hpp:101
@ KEY_D
Definition KeyInput.hpp:44