Frage

Ich werde versuchen, mein Szenario, wie am besten zu erklären, ich kann;

Bei jeder Anwendung tick ich abfragen, um den aktuellen Zustand der Tastatur und der Maus und wickeln Sie sie in einzelnen Klassen und Datenstrukturen. Für die Tastatur ist es eine Reihe von meinem Tasten Enum (ein Punkt für jede der Tasten, die zur Zeit gedrückt werden) und für die Maus ist es eine Klasse von Delta und bools für jede Taste gedrückt enthalten koordinieren.

ich auch eine rudimentäre Zustandsmaschine über eine Zustandsmanagerklasse verwaltet haben, die den Stapel unterhält und Marshalls die Zustände.

Alles, was ich wissen will, ist, wie man am besten die Eingabe zu übergeben (Snapshots) zu den einzelnen Staaten meiner App kann in sein zu jeder Zeit?

Ich möchte so viel von dem Eingang wie möglich weg von den einzelnen Staaten verarbeiten, um innerhalb der Staaten zu wiederholen Logik zu reduzieren.

Oder wäre es besser, den Eingang Snapshots so rein wie möglich zu halten und sie in die Staaten übergeben, so dass sie halten können sie Eingang spezifische Logik versteckt sind?

Hinweis:
Diese Struktur ist ähnlich, wie stelle ich mir ein Spiel funktionieren würde, und obwohl diese Anwendung kein Spiel ist es braucht so schnell wie möglich verarbeitet werden.

War es hilfreich?

Lösung

Warum abfragen Sie den Zustand der Tastatur und die Maus mit jedem tick? Eine viel bessere und traditionelle Lösung wäre, Ereignisse aus der Tastatur und Maus gefeuert zu erfassen. Auf diese Weise müssen Sie nur den Zustand aktualisieren, wenn Sie müssen.

Andere Tipps

Wenn Sie einfach abfragen, Tastatur und Maus jede Zecke, kann ich garantieren, Sie Probleme werden. Wenn Sie jede Zecke abfragen, werden Sie feststellen, dass Sie Eingänge verpassen, die schnell auftreten (innerhalb der Zeitdomäne eines einzelnen Tick). Stellen Sie sich eine Situation, in der sich der Benutzer drückt und eine Taste / Taste zwischen zwei Ticks (es wird passieren mehr als Sie denken.) - Sie vollständig die Eingabe vermissen

Vor allem in C #, das ist vollständig ausgerichtet für die Eingabe Veranstaltungen wie diese, sollten Sie die Verwendung Ereignisse sein.

In XNA, sie tun dies, indem sie die Tastatur Klasse statisch.

KeyboardState state = Keyboard.GetState();

Sie können dann auf den aktuellen Tastenzustand mit dem obigen Codezeile.

Sie sollten Ereignisse ausgelöst und die Argumente erfassen. Das wäre die einfachste und effizienteste Weg, dies zu umgehen.

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top