Em um jogo controlado por um gamepad, em que as entradas de controle alteram diretamente o foco da GUI de um botão da GUI para outro, esses botões da GUI devem ser ativados quando um botão do controlador é pressionado .
Em um jogo controlado por um mouse (ou se um gamepad for usado para mover o cursor do mouse virtual pela tela), os botões na tela devem ser ativados quando o botão do mouse / controlador for liberado sobre o mesmo botão em que estava pressionado . (Se a pressão ocorreu sobre um botão da GUI e o mouse foi movido e liberado sobre um botão da GUI diferente, nenhum botão da GUI está ativado)
A razão para isso é que as habilidades de controle do mouse das pessoas são altamente variáveis e, muitas vezes, as pessoas têm um pouco de dificuldade em posicionar o cursor exatamente onde elas querem, ou até mesmo dizer com precisão qual botão da GUI está passando o mouse no momento. A teoria é que as pessoas podem pressionar e segurar o botão do mouse para destacar o botão da GUI e, se esse botão da GUI não foi o que pretendiam usar, eles podem afastar o cursor antes de soltar o botão do mouse para para evitar pressioná-lo.
Mas se o seu jogo estiver sendo controlado por um gamepad, você absolutamente deseja agir quando o botão do gamepad for pressionado, não quando for lançado.
Edit, cinco anos depois:
Desde que essa resposta foi publicada, um novo padrão começou a surgir para lidar com cursores no estilo de mouse, que são controlados por gamepads.
Na resposta acima, sugeri que eles deveriam ser implementados para funcionarem exatamente como cursores que estão realmente sendo controlados por ratos; destaque no mouse para baixo, ative no mouse para cima se o cursor ainda estiver sobre o mesmo elemento da GUI.
Mas agora, os cursores controlados pelo gamepad normalmente ativam uma ação da GUI depois que o botão do gamepad é pressionado por um período de tempo(normalmente cerca de um segundo). Se você seguir este sistema, precisará de um indicador na tela mostrando quanto tempo até a ativação ocorrer (geralmente, é um pequeno anel ao redor do próprio cursor, que enche quando você se aproxima da ativação do passe o mouse sobre o botão) e você ainda precisa destacar o elemento que será ativado durante o tempo em que o botão estiver pressionado (e pode ser uma boa ideia fazer isso sempre que o mouse estiver sobre um elemento, mesmo se o botão não estiver sendo pressionado). Enquanto o botão estiver sendo pressionado, o cursor não poderá ser movido, a fim de evitar ativações acidentais dos elementos da GUI se o cursor for empurrado no último momento.
O benefício desse sistema é que ele permite que um usuário cujo cursor no estilo do mouse esteja no local errado evite ativar esse elemento, apenas liberando o botão mais cedo; o estilo do mouse "afaste-se dele antes do lançamento" é menos natural em um gamepad do que em um mouse, e essa abordagem permite que um usuário do game aborte um clique indesejado com muito mais facilidade.
Estamos começando a ver alguns jogos experimentando esse modelo de interação com o cursor, mesmo quando o cursor está sendo movido por um mouse real. No Man's Sky faz isso, como um exemplo. Será interessante ver se essa abordagem para lidar com a interação mouse-cursor se tornará cada vez mais comum e esperada nos próximos anos.
Eu agiria assim que a tecla fosse pressionada.
O melhor exemplo de ação após a liberação da chave foi em Starcraft: Broodwar. Quando eu pressionava as teclas muito rapidamente, costumava pressionar a tecla seguinte antes de liberar completamente a anterior, o que fazia com que alguns comandos fossem ignorados. (Clique 1A, Clique 2A, Clique 3A - os 2 seriam ignorados)
Isso mudou no Warcraft III e o jogo me pareceu muito mais receptivo como resultado, e eu nunca tive os problemas do 'grupo de controle complicado' de Broodwar.
fonte