Я делаю игру, и у меня sh будет система, в которой я могу проверять комбинации входов для формирования команды. У меня есть вход, работающий для однократных нажатий клавиш, нескольких нажатий клавиш одновременно, и в одной точке были последовательные вводы с разными клавишами.
моя система ввода - это состояние клавиш определенной длины и 4 буфера одинаковой длины.
int length;
const Uint8* keystate;
Uint8 *firstInput;
Uint8* secondInput;
Uint8* thirdInput;
Uint8* fourthInput;
затем, когда вводятся классы клавиатуры, они устанавливаются на одинаковую длину и инициализируйте мое состояние ключа
keystate = SDL_GetKeyboardState(&length);
firstInput = new Uint8[length]; //all of them like this.
, а затем во время обновления я проверяю состояние ключей и выпуски, подобные этому
if(keystate[Left] && keystate[lPunch])
{
//example
}
if(keystate[lPunch] && !keystate[Crouch] && firstInput[Crouch])
{
//example of checking for release
}
//Outside of if statements I have the buffers mem copied, if I am doing that wrong please do tell me
//I wish for this system to be efficient
SDL_PumpEvents();
std::memcpy(firstInput, keystate, length);
std::memcpy(secondInput, keystate, length);
std::memcpy(thirdInput, keystate, length);
std::memcpy(fourthInput, keystate, length);
keystate = SDL_GetKeyboardState(&length);
Система работает, когда не используется один и тот же ключ, поэтому как мне использовать это более эффективно и с повторением клавиш
//here's my attempt at using the same key, note nothing happens even with code inside
if(keystate[Left] && !secondInput[Left] && firstInput[Left]
{
//Do dash
}
отредактируйте один: добавление порядка memcpy, кажется, меняет результаты при обработке одного перед другим, как
memcpy(secondInput, firstInput, length);
memcpy(firstInput, keystate, length);
это в сочетании с моим да sh код, кажется, делает игрока постоянно лихой