Was ist die häufigste Art, mit Mausklicks in Spielen umzugehen?
Vorausgesetzt, Sie haben nur die Möglichkeit, Eingaben über die Maus zu erkennen, ob eine Taste nach oben oder unten gedrückt ist.
Ich verlasse mich derzeit nur darauf, dass die Maustaste ein Klick ist, aber dieser einfache Ansatz schränkt mich in dem, was ich erreichen möchte, stark ein. Zum Beispiel habe ich Code, der nur einmal mit einem Mausklick ausgeführt werden sollte. Wenn Sie jedoch die Maustaste als Mausklick verwenden, kann der Code mehr als einmal ausgeführt werden, je nachdem, wie lange die Schaltfläche gedrückt gehalten wird. Also muss ich es mit einem Klick machen!
Aber wie geht man am besten mit einem Klick um? Ist ein Klick, wenn die Maus von Maus nach oben oder von unten nach oben bewegt wird, oder ist es ein Klick, wenn die Schaltfläche weniger als x Frames / Millisekunden gedrückt war, und wenn ja, wird dies als Maus nach unten und ein Klick, wenn sie nach unten ist, betrachtet für x Frames / Millisekunden oder einen Klick dann mit der Maus nach unten?
Ich kann sehen, dass jeder der Ansätze seine Verwendung haben kann, aber welcher ist der häufigste in Spielen? Und vielleicht frage ich genauer, welches in RTS-Spielen am häufigsten vorkommt?
Antworten:
Sie sind auf dem richtigen Weg, um herauszufinden, wann die Maus von unten nach oben wechselt, und einen Handler dafür zu schreiben. Für viele Spiele ist es gut genug, ein mouseUp-Ereignis als Klick zu behandeln.
Abhängig von Ihrem Spiel möchten Sie wahrscheinlich beide Ereignisse behandeln. In einem RTS möchten Sie beispielsweise die Drag-Box-Auswahl sowie die Einzelklick-Auswahl einbeziehen. Der Unterschied besteht darin, zu bestimmen, wie lange sich die Maus im Down-Zustand befand, bevor sie freigegeben wurde.
(Ja, Sie haben im Grunde Ihre eigene Frage beantwortet)
quelle
Es gibt kein "Bestes" - Sie brauchen alle.
Wenn ich eine Waffe abfeuere, möchte ich nicht warten, bis die Maus losgelassen wird, um den Waffenabfeuereffekt auszulösen. Wenn Sie eine Box um mehrere Einheiten ziehen, starten Sie die Ziehaktion mit der Maus nach unten.
Wenn ich dagegen auf ein GUI-Element klicke, möchte ich auf den vollständigen Klick warten, da ich das gewohnt bin.
Sie sollten also wahrscheinlich Maus runter, Maus rauf, Maus ziehen (Maus rauf an einer deutlich anderen Stelle als Maus runter) und Mausklick (Maus rauf an derselben Stelle wie Maus runter) implementieren und sie an Teile Ihres Spiels anschließen Sie sehen es für richtig.
quelle
Die Art und Weise, wie die meisten Fenstersysteme damit umgehen, sowie die Spiele, an denen ich gearbeitet habe (und die ich teilweise selbst implementieren musste), bestehen darin, auf jeder Schaltfläche ein Bit zu haben, das erkennt, ob die Maus über die angegebene Schaltfläche in den Maus-Ab-Zustand übergegangen ist. Es wird nur der Rahmen festgelegt, in dem die Maus nach unten geht und erst gelöscht wird, wenn die Maustaste losgelassen wird. Wenn und nur wenn die Maus über die Schaltfläche losgelassen und das Bit gesetzt ist, wird das Ereignis ausgelöst, auf das die Schaltfläche geklickt hat.
(Sie möchten wahrscheinlich auch ein Flag, das auf true gesetzt ist, wenn das Bit gesetzt ist und die Maus über Ihrer Schaltfläche schwebt, sodass Sie die Schaltfläche so ändern können, dass anstelle der normalen Textur eine gedrückte Textur verwendet wird.)
Dies ist das Grundschema hinter den meisten Schaltflächen. Fahren Sie fort und suchen Sie eine Dialogaufforderung. Drücken Sie die Abbrechen-Taste, aber lassen Sie sie nicht los. Die Taste wird gedrückt, während sich die Maus darüber befindet, und wird wieder normal, wenn die Maus nicht mehr darüber schwebt. Wenn Sie sich jedoch wieder darüber bewegen, wird sie wieder gedrückt. Es führt seine Aktion nur aus, wenn Sie loslassen und darüber hinweg sind. Verwenden Sie keine Millisekundenzahl, dies dient hauptsächlich dazu, Doppelklicks innerhalb Ihres Schwellenwerts zu erkennen.
(und wenn Sie wirklich Lust haben möchten, haben Sie Ereignisse, die Sie mit jedem dieser Übergänge verbinden können. z. B. MouseOver beim Ein- und Aussteigen, MouseDown-Ein- / Ausstieg, MouseUp-Ein- / Ausstieg, MouseClicked-Ein- / Ausstieg usw. )
quelle
Maustasten und Tastaturtasten können eine Reihe verschiedener Ereignisse haben. Was verfügbar ist, hängt von Ihrer Wahl der Sprache / Bibliothek ab. Am häufigsten:
Tastendruck, wird ausgelöst, wenn eine Taste gedrückt wird.
Key up, wird ausgelöst, wenn eine Taste losgelassen wird.
Die verzögerte Taste ist gedrückt, wird ausgelöst, wenn eine Taste gedrückt wird, und wird dann in einem systemabhängigen Intervall wiederholt ausgelöst, bis die Taste losgelassen wird.
Darüber hinaus kann ein Anruf erfolgen, um festzustellen, ob gerade eine Taste gedrückt gehalten wird oder nicht.
Es ist wichtig, dass Sie genau wissen, welches Tool Sie verwenden. In den meisten Fällen benötigen Sie die beiden zuerst. Wenn sie nicht verfügbar sind, erstellen Sie sie aus den verfügbaren Tools.
Die Standardmethode zum Registrieren, dass eine Bildschirmtaste mit der Maus gedrückt wird, besteht darin, zu bestätigen, dass dieselbe Taste sowohl auf das Abwärts- als auch auf das Aufwärtsereignis gerichtet war. Für viele Spielelemente kann dies jedoch zu langsam sein, so dass es für viele Aktionen ratsam sein kann, sie beim Down-Event auszuführen.
quelle
XOr kann in dieser Situation dein Freund sein.
Dies ruft sendMouseClickEvent () auf, wenn sich der Status der Maustaste von false in true ändert.
quelle
if (!oldIsButtonUp && isButtonUp) {
.Eine XNA-Version dieses Codes wäre ungefähr so (vereinfacht, nur um das Maus-Down-Ereignis zu erkennen, um Doppelklicks zu erkennen, benötigen Sie etwas Anspruchsvolleres);
quelle