Wie kann ich mit verschiedenen Tastaturlayouts umgehen?

10

Angenommen, ich habe ein Spiel, das WASD-Steuerelemente in einem QWERTZ-Layout verwendet. Der Versuch, diese Steuerelemente beispielsweise für ein Dvorak-Layout zu verwenden, ist nicht ideal (entspricht <A:HQWERTY). ,aoeNatürlich möchte ich dieselben physischen Schlüssel verwenden wie QWERTY ( auf DVORAK).

Ich habe einige mögliche Lösungen gefunden:

  • Zwingen Sie den Benutzer, QWERTZ zu verwenden
    • offensichtlich nicht ideal, besonders für internationale Benutzer
  • Ändern Sie die Verknüpfungen basierend auf dem Tastaturlayout (WASD ->, aoe).
    • zwingt mich, Layoutkarten für jedes unterstützte Layout zu erstellen (automatisierbar)
    • Am einfachsten für den Benutzer, wenn es mehr Verknüpfungen als nur WASD gibt
  • Erzwingen Sie, dass der Benutzer Verknüpfungen selbst definiert
    • Flexibler
    • Ärgerlich, wenn es viele Abkürzungen gibt
    • Kann in Verbindung mit der zweiten Option verwendet werden
  • Verwenden Sie Hardware-Schlüsselcodes
    • Tastaturübergreifend konsistent?

Wie wird so etwas normalerweise gehandhabt?

Beatgammit
quelle

Antworten:

9

Achten Sie auf Scan-Codes. Wie dies geschieht, hängt von Ihrem Betriebssystem ab, das Sie nicht aufgelistet haben. Unter Windows können Sie mithilfe von MapVirtualKey den Scancode für einen bestimmten virtuellen Schlüsselcode von WM_KEYDOWN und Freunden abrufen . Scan-Codes basieren auf dem physischen Schlüssel und werden vom Layout nicht beeinflusst.

Lesen Sie kurz http://www.altdevblogaday.com/2011/10/02/i-never-managed-to-go-left-on-first-try/ .

Also ja, wie Nicol Bolas sagte, können und sollten Sie Benutzer daran arbeiten lassen. Es ist jedoch nicht schwer, es sofort zum Laufen zu bringen, und Ihre Benutzer werden es zu schätzen wissen.

Beachten Sie, dass Sie (wahrscheinlich) mit der falschen Charaktereingabe umgehen, wie die große Mehrheit der Spieleentwickler. Stellen Sie sicher, dass Sie für Text immer WM_CHAR (oder das Äquivalent auf anderen Betriebssystemen) verwenden, anstatt WM_KEYDOWN für die Texteingabe zu verwenden. Es ist völlig falsch anzunehmen, dass Sie beim Drücken der Taste 'a' ein 'a' in ein Texteingabesteuerelement eingeben sollten, da in einigen Layouts Dead Keys verwendet werden. Sie können IME (oder ein gleichwertiges Betriebssystem) auch für ostasiatische Märkte unterstützen, die weit mehr Zeichen enthalten, als vernünftigerweise auf eine Tastatur passen, und für die Eingabe eine spezielle Benutzeroberfläche benötigen. Der Umgang mit IME in einem Spiel ist ein Schmerz (der Umgang mit IME überhaupt ist ein Schmerz), aber meiner Meinung nach lohnt es sich, die Attraktivität Ihres Produkts für eine viel, viel größere Gruppe von Märkten zu erhöhen. Auch hier darf WM_KEYDOWN niemals für Text verwendet werden.

Sean Middleditch
quelle
Guter Rat. Ich habe das Betriebssystem nicht aufgelistet, weil ich nach allgemeinen Richtlinien / Erwartungen gesucht habe (ich kann mit den Implementierungsdetails umgehen).
Beatgammit
6

Sie sollten immer geben dem Spieler die Möglichkeit , ihre Tastenbelegung zu ändern. So wird es "normalerweise gehandhabt": Lassen Sie den Spieler sie ändern. Einige Spieler stellen ihre Tastatur auf QWERTZ ein, wenn sie Spiele spielen, da dies von den meisten Spielen erwartet wird. Einige lassen sie auf ihre aktuelle Tastatur eingestellt und verlassen sich auf die Möglichkeit, die Tasten zu ändern.

Nicol Bolas
quelle
1
Was ist, wenn die Sprache geändert wird? Erwarten Franzosen beispielsweise, WASD -> ZQSD zu ändern, wenn sie ihr AZERTY-Layout beibehalten möchten, auch wenn das Spiel auf Französisch ist?
Beatgammit
1
@tjameson: Hast du meine Antwort gelesen? Lassen Sie sie ihre Schlüsselzuweisungen neu definieren . Dann wird es kein Problem geben.
Nicol Bolas
1
Ja, ich habe Ihre Antwort gelesen und werde wahrscheinlich Ihren Rat befolgen. Ich wollte nur sicherstellen, dass beim Versand an Benutzer in verschiedenen Regionen keine Erwartungen bestehen.
Beatgammit
3

Wenn Sie nicht auf Scan-Codes warten können (wie zum Beispiel bei der Entwicklung eines Flash-Spiels), können Sie eine Schlüsselbindung erstellen, die für so viele Layouts wie möglich funktioniert. Die meisten Tastaturlayouts sind bis auf wenige Ausnahmen sehr ähnlich.

Die Tastaturlayouts nach ISO 9995 (das sind die meisten) sind wie folgt angeordnet:

Tastaturlayout nach ISO

Grundsätzlich sind die schwarzen Tasten sicher zu bedienen.

API-Beast
quelle
Weitere Informationen zu Tastaturlayouts finden Sie unter QWERTY , QWERTZ , AZERTY und QZERTY
Chuck Walbourn,
3

Die meisten Spiele mit großem Budget (mit einem internationalen Distributor) funktionieren sofort und verwenden ZQSD anstelle von WASD für Zertifizierungslayouts. Ein anständiges Spiel führt auch das Layout in der ersten Ebene ein, andere lassen den Spieler es über den Anpassungsbildschirm entdecken. Die Implementierungsstrategie kann erkannt werden, indem das Betriebssystem aufgefordert wird, das Layout zu wechseln. Entweder verwendet das Spiel intern Scancodes (Positionen) und ordnet sie Keycodes (Symbolen) zu, wenn Konfigurationsdialoge und Eingabeaufforderungen angezeigt werden. oder es verwendet intern Schlüsselcodes und erkennt das Layout beim Start oder beim ersten Start.

Die erste Strategie (intern scancodes) ist robuster, erfordert jedoch ein wenig Sorgfalt, um zu verhindern, dass die Abstraktion durchläuft. Denken Sie daran, Scancodes Keycodes neu zuzuordnen, wenn Sie dem Benutzer Schlüssel präsentieren (in Tutorials, Eingabeaufforderungen und Anpassungsdialogen). Sie müssen sich bei der Texteingabe noch die Schlüsselcodes ansehen (z. B. einen Spieler seinen Namen eingeben lassen). Wenn Sie mehr Text verarbeiten müssen, sollten Sie die Unterstützung der Texteingabe auf der Plattform verwenden, die außerhalb des Bereichs einer Spiel-Engine liegt (behandelt tote Schlüssel, Feststelltaste, Kopieren, Einfügen, erweiterte Eingabemethoden…).

Wenn Sie ein Spiel portieren, das niemals Scancodes verwendet hat (was bei einer anständigen Engine nicht der Fall ist, da Scancodes auch näher an der Hardware und schneller sind), ist die andere Strategie möglicherweise praktischer. Sie können Scancodes mithilfe der SDL2-Funktionen SDL_GetKeyFromScancode und SDL_GetScancodeFromKey oder plattformspezifischer Entsprechungen Keycodes zuordnen . Wenn Sie auch die SDL2-Ereignisschleife verwenden, bleiben diese Funktionen über Layout-Schalter hinweg genau. Vermeiden Sie Funktionen wie GetKeyboardLayout () unter Windows. Es gibt keine Garantie dafür, dass Sie das Layout in einer bekannten Liste finden.

Gabriel
quelle