Pergunta

Vou tentar explicar meu cenário da melhor forma possível;

Em cada aplicativo carrapato I consultar o estado atual do teclado e mouse e envolvê-los em aulas individuais e estruturas de dados. Para o teclado é uma série de meu Chaves enum (um item para cada uma das chaves que estão pressionadas) e para o mouse é uma classe que contém coordenar delta do e bools para cada botão pressionado.

Eu também tenho uma máquina de estado rudimentar gerenciado via uma classe gestor estadual que mantém a pilha e Marshalls os estados.

Tudo que eu quero saber é, a melhor forma de passar a entrada (snapshots) para os estados individuais meu aplicativo pode estar em em qualquer momento?

Gostaria de processo, tanto de entrada quanto possível longe dos estados individuais, de forma a reduzir a repetição lógica dentro dos estados.

Ou seria melhor manter os instantâneos de entrada tão pura quanto possível e passá-las para os estados para que eles possam manter eles são específicos-input-lógica escondido?

Nota
Esta estrutura é semelhante à forma como eu imagino um jogo iria funcionar, e embora esta aplicação não é um jogo ele precisa ser processado o mais rápido possível.

Foi útil?

Solução

Por que você está consultando o estado do teclado e rato com cada tique? Uma solução muito melhor e tradicional seria a eventos de captura disparados a partir do teclado e mouse. Dessa forma, você só precisa atualizar o estado quando você tem que.

Outras dicas

Se você simplesmente consultar o seu teclado e mouse cada carrapato, posso garantir que você vai correr em problemas. Quando você consulta cada escala, você vai achar que você perca entradas que ocorrem rapidamente (dentro do domínio do tempo de um único carrapato). Imagine uma situação onde o usuário pressiona e libera a / botão Chave entre dois carrapatos (isso vai acontecer mais do que você pensa) -. Você vai perder completamente a entrada

Particularmente em C #, que é completamente voltada para eventos de entrada como este, você deve estar usando eventos.

Em XNA, eles fazem isso por fazer a classe estática teclado.

KeyboardState state = Keyboard.GetState();

Você pode, então, acessar o estado-chave atual com a linha acima do código.

Você deve disparar eventos e capturar os argumentos. Essa seria a maneira mais fácil e mais eficiente para lidar com isso.

class YourClass
{    
    //data members ...

    public void OnKeyboardPress(object sender, EventArgs args)
    {
        //handle your logic capturing the state here
    }
}

//elsewhere
someControl.KeyPress += new KeyPressDelegate(yourClassInstance.OnKeyboardPress);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top