x9/Scripte/Input ed

Bisher unterstützt die Engine nur Maus und Tastatur, also noch keinen Joystick.

Jede Eingabe muss über Script-Funktionen abgefragt werden (im Gegensatz zu Callback-Systemen). Die Funktionen geben jeweils die Eingaben während des letzten Frames an.

Table of Contents

Tastatur ed

Die Abfrage-Funktionen für die Tastatur sind:

Die Tasten werden dabei durch Konstanten repräsentiert (z.B. KEY_A für die A-Taste, KEY_SPACE für die Leertaste).

Beispiel:

class X extends Controller
    void on_iterate(float dt)

   # Ego durch Pfeiltasten bewegen
       if GetKey(KEY_LEFT)
           Ego.pos.x -= 100.0 * dt
       if GetKey(KEY_RIGHT)
           Ego.pos.x += 100.0 * dt
       if GetKey(KEY_UP)
           Ego.pos.y -= 100.0 * dt
       if GetKey(KEY_DOWN)
           Ego.pos.y += 100.0 * dt
       if GetKeyDown(KEY_SPACE)
           shoot()

Maus ed

Die Abfrage-Funktionen für die Tastatur sind:

  • GetButton(int button): ist die linke/mittlere/rechte Maustaste gerade gedrückt?
  • GetButtonDown(int button): wurde die linke/mittlere/rechte Maustaste im letzten Frame herunter gedrückt?
  • GetButtonUp(int button): wurde die linke/mittlere/rechte Maustaste im letzten Frame losgelassen?

Die Maus-Position und Bewegung ist in folgenden Variablen gespeichert:

  • mouse und mouse_pixel: die aktuelle Position (im [0,1][0,1]-Koordinatensystem oder in Pixeln)
  • dmouse und dmouse_pixel: der Weg, den sich die Maus im letzten Frame bewegt hat (die z-Komponente gibt die Bewegung des Mausrades an)

Beispiel:

class X extends Controller
    Picture *cursor

    void __init__()

        # einen Mauszeiger erstellen
        cursor = new Picture(v_0, 0.1, 0.1, LoadTexture("cursor.jpg"))

    void on_iterate(float dt)

        # Mauszeiger bewegen
        cursor.pos = mouse

noch ein Beispiel:

class X extends Controller

    void __init__()
        ego.ang = v_0

    void on_iterate(float dt)

        # Dragball-Rotation
        if GetButton(0)
            vector d_ang = vector(dmouse.y * 2.0, dmouse.x * 2.0, 0)
            ego.ang = VecAngAdd(d_ang, ego.ang)