Ankündigung

Einklappen
Keine Ankündigung bisher.

Tastatur auslesen

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Tastatur auslesen

    per Script greift man ohne keyboard sensor auf die Tastatur zu
    mport bge

    keyboard = bge.logic.keyboard
    JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED

    if keyboard.events[bge.events.WKEY] == JUST_ACTIVATED:
    print("Activate Forward!")

    in Python gibt es den input() Funktion wo man direkt auf die Tastatur zugreife wie geht das mit der BGE

  • #2
    Versuch ich mich mal als Laie an deinem Problem.

    input() gibt es in mehreren Programmiersprachen. In der Regel führt das zu einem blinkenden Cursor auf dem Bildschirm und man kann über die Tastatur Sachen eingeben. Durch Drücken der Enter- Taste werden die eingegebenen Zeichen einer Variable zugewiesen. Für die Zeit der Eingabe ist das Programm dann in einer Schleife, die durch die Enter- Taste beendet wird.

    In der BGE gibt es kein input(). Dein Script ist Teil einer größeren BGE- Loop. input() und andere Sachen wie while- Schleifen haben das Potential, das Kartenhaus zusammenstürzen zu lassen, weil benötigte Infos nicht fließen, während das Programm in einem Unterscript festhängt und auf eine Tastatureingabe wartet.

    Für ein Monopoly- Spiel wollte ich mal die Möglichkeit schaffen, Spielernamen zu ändern und bin fast dran verzweifelt.

    Möglich, wenn auch kompliziert und nervig: Die keyboard events erfassen und daraus die benötigte Zeichenkette erstellen, wie es in anderen Umgebungen oft input() auch tut.
    Zuletzt geändert von flegel; 06.10.2018, 14:38.

    Kommentar


    • #3
      Ich hänge irgendwie daran fest, zwischen groß und Kleinschreibung zu unterscheiden.
      mein Problem ist,
      ich schaffe es irgendwie nicht, das wenn zwei bzw. Drei verschiedene tasten gleichzeitig gedrückt werden, ein großer Buchstaben raus kommt und wenn ein Buchstaben gedrückt wird, aber bestimmte tasten nicht gleichzeitig zutreffend, ein kleiner Buchstabe raus kommt,... Bei mir kommen immer gleich ein großer und ein kleiner Buchstabe.

      kann es sein, das es nicht reicht anzufragen, ob der Sensor positive ist, sondern ich auch zwischen 1, 2 &3 unterscheiden muss?
      1 = drücken
      2 = gedrückt halten
      3= los lassen

      wie kann ich abfragen ob die taste gehalten wird?
      irgendwie muss man das ja auswählen können, wenn es schon unterschieden wird.

      Kommentar


      • #4
        Wie flegel schon geschrieben hat, input() geht in der BGE nicht.

        Entweder gibt es da die von flegel erwähnte Möglichkeit, Keyboard Events zu erfassen, oder man macht das ganze mit dem Keyboard-Sensor, der bereits eine eingebaute Funktion dafür besitzt:

        Rechts neben dem Feld für die Eingabe der Taste, auf die der Sensor reagieren soll, gibt es einen Button "All Keys". Zudem müsst ihr zwei Properties anlegen, eine String-Property, die später die Eingabe beinhaltet und eine Boolean-Property, die angibt, wann die Eingabe aktiv sein soll. Die Boolean Property schreibt ihr im Sensor in das "Log Toggle"-Feld, die String Property in "Target".

        In der .blend-Datei im Anhang findet ihr ein kleines Beispiel, mit Space könnt ihr die Eingabe starten und mit Enter (Return) beenden. Auch Backspace funktioniert hier. Wie ihr seht muss der Key-Sensor nicht mit einem Controller verbunden sein, damit das funktioniert (siehe Datei).

        EDIT: Wie es scheint, muss nichtmal All Keys aktiviert sein
        Angehängte Dateien
        Aktuelles Spieleprojekt "The Myth of Excalibur"

        Kommentar


        • Kia
          Kia kommentierte
          Kommentar bearbeiten
          Das Löst alle meine Probleme!!! ^^ und erfüllt sogar noch zusätzliche Funktionen!!
          Das macht mein Script um einiges kürzer!!! ^^

      • #5
        Ich hab das ganze komplett ohne Keyboard Sensor gelöst, schaut im Code dann etwa so aus:
        Code:
        import events
        key = logic.keyboard.events
        if key[events.TABKEY] == 1: 
              #dosomething
        Das jetz mal nur als Beispiel für die Tab-Taste. Und ja es wird unterschieden zwischen 1 (wird aktiviert beim drücken), 2 (gehalten) und 3 (aktiviert beim loslassen).

        Hoffe das hilft. Liebe Grüße

        Kommentar


        • Momel
          Momel kommentierte
          Kommentar bearbeiten
          Das ganze könnte man sogar soweit ausbauen, dass die Liste aller gedrückten Keys ausgelesen wird und die entsprechende Taste dem Eingabe-String hinzugefügt wird
      Lädt...
      X