const char IsPressed = 1; // 1
const char WasHeldDown = 2; // 10
const char IsFirstPress = 4; // 100
char* keystates[256];
Class::CalculateKeyStates()
{
for(int i = 0; i < 256; ++i)
{
if(this->IsDown(i))
{
keystates[i] |= IsPressed; // turn on
if(keystates[i] & WasHeldDown)
{
//keystates[i] |= IsFirstPress;
keystates[i] &= ~IsFirstPress; // turn off
}
else
{
keystates[i] |= WasHeldDown + IsFirstPress; // Turn on
}
}
else
{
keystates[i] = 0; // Turn ALL off
}
}
}
Эта функция будет функцией-членом класса Class.Другая функция-член, IsDown, будет возвращать true, если рассматриваемый ключ не работает, и false, если нет.
Можете ли вы найти какой-либо способ дальнейшего улучшения этой функции?
Спасибо
РЕДАКТИРОВАТЬ:
Я немного подробнее расскажу о том, что и почему делается.Это модификация небольшого кода, который работает через массив keyStates (который представлял собой структуру из трех элементов bool), устанавливая для IsPressed значение false для всех ключей.затем снова установите для параметра Ispressed значение this-> IsDown, а затем в третий раз зацикливайтесь, проверяя, удерживалась ли клавиша, если она больше не нажимается при первом нажатии, установите для этого значения значение false.если он не удерживался, затем установите первое нажатие на true и также удерживайте на true, поэтому в следующий раз он будет помечен как удерживаемый.
EDIT2:
Добавлены некоторые комментарии ккод и исправил одну строку