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:
- GetKey(int key): ist die Taste gerade gedrückt?
- GetKeyDown(int key): wurde die Taste im letzten Frame herunter gedrückt?
- GetKeyDownRep(int key): wurde die Taste im letzten Frame herunter gedrückt? (schlägt aber auch solange die Taste gedrückt bleibt regelmäßg wieder an)
- GetKeyUp(int key): wurde die Taste im letzten Frame losgelassen?
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)