Geralmente, é possível ao jogador pressionar e soltar um botão em um único quadro, para que o mecanismo do jogo não tenha tempo para detectá-lo?
Como os programadores geralmente lidam com essa situação? É mesmo necessário lidar com isso?
Durante os testes, pude pressionar e soltar um botão em cerca de 14 ou 15 milissegundos (mais de 1 clique / quadro). No entanto, eu não era capaz de fazer isso enquanto mantinha o joystick normalmente, e o ciclo de liberação da imprensa teria que começar quase na hora exata em que o quadro inicia.
Especificamente, estou perguntando sobre os recursos de entrada do joystick do GLFW.
Atualmente, estou usando o GLFW para criar um jogo e notei que o teclado e o mouse têm funções de retorno de chamada, enquanto os joysticks não. Além disso, não parece possível ativar "teclas de aderência" para um joystick. (Apenas recentemente comecei a usar o GLFW, por favor, corrija-me se estiver errado, pois isso poderia resolver o problema.)
Embora eu esteja perguntando sobre o GLFW, respostas relacionadas a qualquer biblioteca / mecanismo / idioma são bem-vindas.
Você tem certeza sobre isso? Eu posso ver uma transição de estado indo tão rápido aqui e ali, mas você percebe que levaria 70 pressionamentos por segundo para ver um botão pressionado a cada 14ms? Sinto muito, mas isso não é fisicamente possível, embora talvez você possa induzi-lo aqui e ali com um apertar de botão louco de todos os nós, e talvez haja até algum salto no próprio hardware. Você já assistiu a um vídeo de jogadores profissionais de StarCraft, onde eles usam todos os dedos de uma mão e um mouse e clicam tão rápido que é um borrão? Esses caras são deuses se puderem executar 300 ações por minuto, ou seja, 5 por segundo usando as duas mãos ...
Dito isto, em geral, com muitos jogos, você apenas vê as entradas pesquisadas em todos os quadros. A possibilidade de uma imprensa completa de imprensa acontecer dentro de um quadro e se perder é bastante remota nas taxas de quadros interativas, e eu nunca soube que um desenvolvedor de jogos se preocupasse com isso.
Em alguns sistemas, você pode obter entrada em buffer. O sistema monitora os dispositivos de entrada de forma assíncrona e preenche uma fila com todas as alterações de estado ocorridas desde a última consulta, e geralmente você deixa o buffer preencher entre os quadros e processá-lo em cada quadro, para que a resolução seja maior do que a pesquisa o estado de cada quadro.
Alguns sistemas são controlados por eventos, portanto, você pode registrar um retorno de chamada que é acionado toda vez que o estado de entrada é alterado, embora a resolução dependa do restante da pilha de software e possa ou não ser significativamente melhor do que uma verificação por quadro. Por exemplo, se a API estiver apenas pesquisando o hardware em cada quadro, comparando-o com o último quadro e acionando os retornos de chamada aplicáveis, você não estará melhor.
Com sistemas embarcados e alguns sistemas de jogos antigos programados para o metal, você teria interrupções nos botões. Uma interrupção é um pequeno pedaço de código que você registra no sistema que é executado sempre que algo acontece. No caso de uma interrupção de botão, o hardware seria fisicamente projetado para que, quando a tensão no fio conectado ao botão for de baixa a alta ou alta a baixa, ele execute esse código. Este seria o sistema mais direto e responsivo, mas a maioria dos jogos hoje em dia tem uma tonelada de hardware e software entre você e os botões.
fonte
Supondo que um jogo seja executado a 60 qps, cada quadro é de cerca de 17 milissegundos. É altamente improvável que alguém possa pressionar e liberar nesse período de tempo. Se você pode clicar rápido o suficiente para obter cerca de 60 cliques por segundo , pressiona e libera rápido o suficiente para vencer os quadros.
fonte