DE EN FR ES IT CZ

6. Auf Tasten und Maus reagieren

Auf Tasten und Maus reagieren

Pia drückt einen großen Taster, über ihr leuchtet die Glühbirne auf

Manche Dinge sollen im ganzen Spiel gelten, nicht nur in einer Aktion. Dafür meldest du in einem Definitions-Skript einen Ereignis-Handler an: eine Funktion, die Visionaire bei einem bestimmten Ereignis aufruft.

Eine Taste für Hinweise

Leg an der Kulisse eine Aktion hinweis_geben mit der Ausführungsart „Aufruf durch andere Aktion“ (englisch „Called by other action“) an, die einen Hinweis ausgibt. Dann:

function tastenHandler(eventType, character, keycode, modifiers)
  if eventType == eEvtKeyUp and character == "h" then
    startAction(Actions["hinweis_geben"])
    return true    -- Taste ist erledigt
  end
  return false     -- alles andere bearbeitet Visionaire wie gewohnt
end
registerEventHandler("keyEvent", "tastenHandler")

Wichtig ist der Rückgabewert: true heißt, die Engine ignoriert diese Taste. Gibst du bei allen Tasten true zurück, funktioniert zum Beispiel Escape nicht mehr.

Einfache Tasten-Aktionen kannst du auch ohne Lua im Editor anlegen. Der Handler lohnt sich, wenn du Tasten abhängig vom Spielzustand behandeln willst.

Das Mausrad

function mausHandler(eventType, position)
  if eventType == eEvtMouseWheelUp then
    print("Rad hoch bei " .. position.x .. ", " .. position.y)
  end
end
registerEventHandler("mouseEvent", "mausHandler", {eEvtMouseWheelUp, eEvtMouseWheelDown})

Später ausführen

setDelay(2000, function()
  print("Zwei Sekunden später")
end)

Vorsicht mit der Hauptschleife

Ein Handler für "mainLoop" läuft etwa 60 Mal pro Sekunde. Was dort steht, kostet bei jedem Bild Rechenzeit. Nutze ihn nur, wenn es wirklich nicht anders geht, und halte ihn kurz.

Regel zum Mitnehmen
Ereignis-Handler gehören in Definitions-Skripte und sollen nur das Nötigste tun.

Deine Aufgabe
Bau die Hinweistaste nach. Prüf danach, ob Escape im Spiel noch funktioniert.