Hallo,
ich arbeite gerade mit einem Freund an einem Spiel, bei dem ich der Programmierer bin. Dabei stoße ich auf ein Problem, bei welchem ich auf eure Hilfe angewiesen bin, da ich auch nach langer Google/Bing-Suche keinen passenden Rat gefunden habe.
Erst einmal etwas Allgemeines:
Compiler: VS 2013
Bibliothek: SFML 2.2
Sprache: C++
Typ: Konsolenanwendung
Nun zum Problem:
Unser Spiel soll einen kleinen Ingame-Chat erhalten, welcher auch schon funktioniert, allerdings funktioniert es mit der Eingabe von Texten über die Tastatur noch nicht ganz. Mein erster Ansatz war es, mithilfe der SFML abzufragen, ob eine Taste gedrückt ist oder nicht. Dies funktioniert auch ganz gut, allerdings fehlen mir bei der SFML Zeichen wie "ß, ä, ö, ü, ?, ...". Ich habe diese auch nicht hier gefunden:
http://www.sfml-dev.org/documentation/2.…1_1Keyboard.php Ein weiteres Problem ist, das "Z" und "Y" vertauscht sind (ich vermute die SFML nutzt das amerikanische Tastatur-Layout). Da dies natürlich gerade für einen Chat in unserer Gegend nicht hinnehmbar wäre, habe ich gegoogelt. Dabei bin ich auf "_kbhit()" und "_getch()" gestoßen. Also habe ich für einen Test eine weitere Konsolenanwendung erstellt, es hat alles tadellos funktioniert. Ich habe begonnen, dies nun in dem Hauptprojekt zu integrieren, allerdings habe ich festgestellt, dass dies nur geht, wenn das Konsolenfenster aktiv ist, was eigentlich nicht geht, wenn das kleine Chat-SFML-Fenster den Fokus hat. Nach erneuter Suche bin ich auf GetAsyncKeyState() gekommen, welches aber anscheinend auch keine Unterstützung für "ä, ö, ü" bietet. Zumindest konnte ich hier keine entsprechendes Keycodes ausfindig machen:
https://msdn.microsoft.com/en-us/library…1(v=vs.85).aspx Kann es sein das ich sie überlesen habe, bzw. kennt einer von euch, falls es sie gibt, die Keycodes? Oder bin ich mit meinen Ansätzen komplett auf dem falschen Weg?
Weiteres:
Eine mögliche Lösung sollte so sein, dass nicht gewartet wird, bis eine Taste gedrückt wird, weil ich Multithreading vermeiden möchte. Wenn es geht, wäre ich auch dankbar, wenn ich nicht auf eine Win32-Anwendung "umsatteln" müsste, da ich die schnelle Möglichkeit Variablen für das Debugging mit std::cout über die Konsole auszulesen, nicht missen möchte.
Ich hoffe ich konnte euch mein Problem so gut wie möglich schildern,
Mit freundlichen Grüßen
alex41018