Frage

Ich habe ein FPS -Spiel mit MSVC ++ gemacht, das unter Windows sehr gut läuft. Aber jetzt versuche ich, es tragbar zu machen (zumindest möchte ich ein Linux und eine Windows -Version erstellen). Deshalb habe ich beschlossen, die IDE in Code :: Blocks und das Framework in WXWidgets zu ändern. Es scheint jedoch, dass die virtuellen Schlüsselcodes und Scan -Codes in verschiedenen Systemen unterschiedlich sind.

Früher habe ich festgestellt, dass die virtuellen Schlüsselcodes auch auf demselben Betriebssystem unterschiedlich sein können, aber andere Computer (ich habe Fehlerberichte darüber erhalten, dass sie den Charakter nicht kontrollieren können (abhängig vom Numlock -Status, LOL, nicht Scherz), was beim Ändern der Änderung behoben wird Code zur Verwendung von Scancodes anstelle von Virtkey -Codes) (bearbeiten: Mit WXWIDGEs sowohl Virtkey- als auch Scan -Codes auf dem Numpad hat je nach Numlock -Status unterschiedliche Werte, Bang!)

Mit WXWIDGETS scheint es, dass das WXKeyEvent :: GetrawkeyCode und der Code, der zuvor von LPARAM von Wm_Keydown erhalten wurde, unterschiedlich sind. Und ich erhalte auch einen völlig anderen Scan -Code unter Linux (Ubuntu) von getrawkeycode.

Nun, ich kann meine eigene Scan -Code -Tabelle erstellen, indem ich alle Tasten drücke und sehe, welchen Code er gibt, aber das einzige Problem, das Ubuntu auf meinem Laptop ausführt, und der Laptop hat keine vollständige Tastatur ... aber ich brauche alle von ihnen Damit die Steuereinstellungen funktionieren.

Die Frage: Gibt es eine Standard- und plattformübergreifende Möglichkeit, denselben Code für denselben Schlüssel zu erhalten (der Schlüssel an derselben Position, um genauer zu sein)? (Zumindest unter Windows und Linux)

War es hilfreich?

Lösung

Falls Sie es noch nicht berücksichtigt haben, können Sie möglicherweise verwenden SDL.

Andere Tipps

Da dies ein FPS ist, macht das von Ihnen verwendete Grafik-Toolkit auf niedrigerer Ebene einen großen Unterschied (ich gehe davon aus, dass Sie keine 3D-Grafiken in WXWIDGETS schreiben). Wenn Sie OpenGL verwenden, haben Sie sich angesehen, was GLUT tun können?

Das Glutkeyboardfunc und glutspecialfunc kombiniert mit GLUTGETMODIFIER könnte für plattformübergreifende Tastaturcode ausreichen, und es kann sogar für andere Eingabegeräte verwendet werden.

Um ehrlich zu sein, sehe ich immer noch nicht, wie dies möglicherweise etwas mit WXWidgets zu tun hat.

Meiner Meinung nach ist es völlig falsch, WXWIDGETS zu verwenden, um schnelllebige 3D-Spiele zu codieren. In "Hardcore" -Spielentwicklung sollten Sie sie verwenden, um unterstützende Tools wie Redakteure und Konverter zu entwickeln.

SDL ist der richtige Weg. Es mag ziemlich einfach erscheinen, aber wenn Sie anfangen, kleine Kinder den unheiligen Göttern von SDL zu opfern, ist Dinge wie Sdl_image (Perfekt zum Lesen zahlreicher Bilddateiformate - in dem Maße, in dem ich manchmal SDL verwende, um zB JPEG zu lesen) oder manchmal Sdl_mixer (Allein -Lösung Sie benötigen zum Lesen und Spielen von Basic Audio - Ogg, Wav, ...).

Suchen Sie also nicht weiter als SDL. Sogar die 2D -Grafikunterstützung ist gut, sobald Sie mit SDL_GFX beginnen. SDL mag zunächst grundlegend erscheinen, aber sobald Sie in allen zusätzlichen Bibliotheken gezählt werden, die darum gebaut wurden, und wenn Sie ein paar Wrapper um sie herum codieren, wird SDL die perfekte Balance zwischen bloßen Notwendigkeiten und einfacher fortgeschrittener Verwendung sind.

Ich werde Ihnen gerne in irgendeiner Weise mit SDL helfen, da ich es so großartig finde.

Ich mag falsch schädigen, was du hier siehst, aber ich schaue mir das an Rohschlüsselcode wurde zurückgegeben führt zu Hardware-, Betriebssystem-, Konfigurations- und Plattformunterschieden, sodass Sie sich das ansehen sollten Virtual KeyCode wurde zurückgegeben durch eine Schlüsselereignis.

EDIT: Vielleicht wxWidgets Handle einfach nicht richtig damit (zweifelhaft). Das Problem des Numlock -Schlüssels besteht darin, Sie zu "zwingen", dies (schlecht) mit dem RAW -Scan -Code zu umgehen.

Wenn dies der Fall ist, müssen Sie nicht wegwerfen, was Sie getan haben, aber wenn Sie hinzufügen SDL Nur für die Eingabebüßer finden Sie Anrufe, die die zurückgeben Sdl_keysym Geben Sie nicht nur den Hardware -Scancode zurück (was Sie nichts gegen "Fixieren" tun können), sondern auch einem Unicode -Charakter und einem virtuellen Symbol zuzuordnen, was ich denke, wonach Sie suchen. Hoffentlich haben ihre Anrufe dieses Problem mit dem Numlock -Modifikator nicht.

Wenn Sie SDL nicht nicht verwenden wollen, empfehle ich SFML - einfache und schnelle Multimedia -Bibliothek. Es ist multiplattform und sehr einfach zu bedienen. Zum Beispiel von Tutorials Abschnitt:

bool         LeftKeyDown     = Input.IsKeyDown(sf::Key::Left);
bool         RightButtonDown = Input.IsMouseButtonDown(sf::Mouse::Right);
bool         Joy0Button1Down = Input.IsJoystickButtonDown(0, 1);
unsigned int MouseX          = Input.GetMouseX();
unsigned int MouseY          = Input.GetMouseY();
float        Joystick1X      = Input.GetJoystickAxis(1, sf::Joy::AxisX);
float        Joystick1Y      = Input.GetJoystickAxis(1, sf::Joy::AxisY);
float        Joystick1POV    = Input.GetJoystickAxis(1, sf::Joy::AxisPOV);

wo Eingabe ist

const sf::Input& Input = App.GetInput();

Es gibt Einige Anzeichen Das SFML ist schneller als SDL, aber ich neige dazu, es zu schneller und tragbarer Code zu peitschen, da mir die Verwendung mehr gefällt als SDL.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top