Как сделать эффективный последовательный ввод и нажатия клавиш даже с помощью одной и той же клавиши? - PullRequest
0 голосов
/ 17 марта 2020

Я делаю игру, и у меня 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 код, кажется, делает игрока постоянно лихой

...