OpenSiv3D
OpenSiv3D copied to clipboard
Mac, Linux, Web で KeyShift, KeyControl, KeyAlt, KeyCommand の挙動がおかしい
- reported by: https://discord.com/channels/443310697397354506/998714483612602489/1373319605325664318
問題
Mac, Linux, Web で KeyShift, KeyControl, KeyAlt, KeyCommand を長押しした時、 .down() が true になり続けます。
また、離した時に .up() が true になりません。
原因
原因は CKeyboard::update() の実装にあると考えられます。
macOS_Linux の CKeyboard.cpp を見ると、問題が発生するキーの InputState::update() を2回呼び出していることが判明しました。
https://github.com/Siv3D/OpenSiv3D/blob/fdc5662048a27974c989c3dac1fc38d41074e62b/Siv3D/src/Siv3D-Platform/macOS_Linux/Siv3D/Keyboard/CKeyboard.cpp#L228-L252
最初の for ループで一度呼び出され、その後個別に2回目の呼び出しが行われています。
for ループ内では、問題になっているキーについては glfwKey == 0 なので、常に .update(false) が呼び出されます。
この .update(false) によって InputState が長押しを認識できず、毎フレーム .down() が true になります。