Portanto, suponha que você tenha um sistema de entrada baseado em pesquisas
void update()
{
if( Keyboard[ 'A' ] )
// A is down
}
Digamos que você queira reconhecer combinações de teclas de 3 a 8 comprimentos (como baixo, baixo para frente, frente, A para hado-ken)
Como você criaria melhor um sistema de entrada de combinação de teclas genérico (facilmente modificável / programável) na entrada pesquisada ?
Uma maneira é armazenar os estados de entrada atuais e anteriores e compará-los sempre que você pesquisar a entrada.
Para cada tecla que pode ser pressionada, armazene um objeto com um registro de data e hora da última vez em que a tecla mudou de um estado inativo para um estado ativo.
Atualize esses objetos fazendo isso em todas as pesquisas:
Agora você pode combinar seus combos com o conteúdo de
keys
.Tenha um objeto de combinação para cada combinação e chame update () em cada objeto de combinação em cada pesquisa.
O método update () de um objeto de combinação corresponderá ao padrão, verificando se todas as condições necessárias para o combo são satisfeitas nesta enquete. Ou seja, todos os timestamps de teclas do combo até o momento estão em ordem e nenhuma outra tecla que interrompa o combo foi pressionada nesse quadro. Para cada condição atendida, aumente um contador no objeto combo para a próxima condição a ser verificada. Quando todas as condições forem atendidas em um combo, chame o método que o combo deve executar. Se
some_key_has_been_pressed == true
a tecla que é a próxima condição do combo não tiver sido pressionada, redefina o contador de condições satisfeitas do combo para 0.O acima é o meu método preferido, pois é simples de implementar, fácil de manter, eficiente e altamente modular.
No entanto, para outro bom método, consulte a amostra da sequência de entrada XNA , escrita em C #, e a lógica provavelmente pode ser transferida para o idioma que você está usando.
fonte
if(current_input[key].down){
você também não gostaria de verificar se a chave estava noprevious_input
estado? Como está escrito, acho que atualizaria continuamente uma chave retidadown_timestamp
.Faça uma pilha dos últimos eventos da tecla X. Para cada evento da tecla, adicione um objeto com a tecla e a hora do pressionamento / liberação e verifique se os últimos membros da pilha correspondem a um padrão especial e se essas teclas foram pressionadas rápido o suficiente para conte como uma combinação. Por fim, remova o objeto mais antigo da pilha.
fonte