Я считаю, что проблема связана также с аппаратной клавиатурой. Я сам проверил код на своей клавиатуре и не могу одновременно нажимать более 3 клавиш на клавиатуре, отличной от USB.
Теперь в вашем примере это не должно быть проблемой, потому что вам никогда не нужно нажимать более 3 клавиш. Но будь осторожен! Есть еще одно ограничение в аппаратной клавиатуре, и оно связано с близостью клавиш, которые вы нажимаете друг с другом.
Например, при попытке вашего кода мне показалось, что я не могу получить KEY_UP, когда у меня есть две другие клавиши KEYed_DOWN (то есть постоянно нажимаются) рядом с той, которую я называю KEYing_UP (поэтому та, которую я хочу получить key_up событие для). Поэтому я считаю, что именно поэтому ваш код работает только с левой стрелкой. Ваши клавиши со стрелками вверх, вниз и вправо, возможно, каким-то образом слишком близки к changeColorKey, и из-за этого (я полагаю, из-за того, как выполняется схема на клавиатуре) он не может вызвать его состояние «вверх».
Попробуйте переместить ShockKey и / или changeColorKey куда-нибудь еще дальше и посмотрите, работает ли это.