Grundlage ist der Visionaire Studio Guide von Chris Tikkos (Dionous Games), hier mit seiner Erlaubnis veröffentlicht. Die Befehle stehen in der Referenz Globale Befehle.
Maus einrichten
Die Mausaktionen legst du unter „Game Properties > Mouse Properties“ fest:

Über den Blitz-Knopf fügst du Aktionsteile hinzu, die bei Mausereignissen laufen, zum Beispiel bei Links-, Rechts- oder Doppelklick und beim Drehen des Mausrads. Hier legst du auch fest, ob der spielbare Charakter zur angeklickten Stelle läuft, nur beim Klick auf ein Objekt losläuft oder gar nicht.
Dasselbe geht mit Lua:
-- Linksklick schickt den Charakter nicht zur Mausposition game.LeftClickBehaviour = eMouseActionBehaviourDoNotSendCharacter
Für die anderen Tasten nimmst du game.RightClickBehaviour, game.MiddleClickBehaviour und game.LeftHoldBehaviour. Statt der Namen kannst du auch die Zahlen des Enums verwenden:
0=eMouseActionBehaviourDoNotSendCharacter: Der Charakter läuft nicht zur Position.1=eMouseActionBehaviourSendCharacterToCursor: Der Charakter läuft zur Position.2=eMouseActionBehaviourSendCharacterToObjects: Der Charakter läuft nur dorthin, wenn an der Position ein Szenenobjekt ist.
Mausereignisse mit Lua verarbeiten
Volle Kontrolle bekommst du mit einem Ereignis-Handler für Mausereignisse in einem Definitionsskript:
function onMouseEvent(eventType, mousePosition)
if eventType == eEvtMouseWheelUp or eventType == eEvtMouseWheelDown then
-- das Mausrad wurde bewegt, etwas tun
end
end
registerEventHandler("mouseEvent", "onMouseEvent", {eEvtMouseWheelUp, eEvtMouseWheelDown})
Die Handler-Funktion bekommt immer zwei Argumente: eventType, eines der Ereignisse aus der registrierten Liste, und mousePosition, die aktuelle Position (x, y). Gibst du keine Liste an, erhält der Handler alle Mausereignisse. Unterstützte Ereignisse:
eEvtMouseMoveeEvtMouseLeftButtonDoubleClick,eEvtMouseLeftButtonDown,eEvtMouseLeftButtonUp,eEvtMouseLeftButtonHold,eEvtMouseLeftButtonHoldingeEvtMouseRightButtonDoubleClick,eEvtMouseRightButtonDown,eEvtMouseRightButtonUpeEvtMouseMiddleButtonDown,eEvtMouseMiddleButtonUpeEvtMouseWheelUp,eEvtMouseWheelDown
Etwas wiederholen, solange eine Taste gedrückt ist
Kombiniere einen Maus-Handler mit einem mainLoop-Handler. Nimm dabei einen einzigen Maus-Handler, der den Ereignistyp prüft:
local buttonPressed = false
function onMainLoop()
if buttonPressed then
-- läuft in jedem Frame, solange die linke Taste gedrückt ist
end
end
function onMouseButtons(eventType, mousePosition)
if eventType == eEvtMouseLeftButtonDown then
buttonPressed = true
elseif eventType == eEvtMouseLeftButtonUp then
buttonPressed = false
end
end
registerEventHandler("mouseEvent", "onMouseButtons", {eEvtMouseLeftButtonDown, eEvtMouseLeftButtonUp})
registerEventHandler("mainLoop", "onMainLoop")
Gamepads
Visionaire nutzt die Bibliothek SDL, deshalb funktioniert jeder Controller, den SDL unterstützt. Lade gamecontrollerdb.txt herunter und lege die Datei in deinen Spielordner. Sie enthält Zuordnungen für fast alle Controller; eigene kannst du mit Mapping-Werkzeugen ergänzen.
Gamepad-Tasten kommen als Tastaturereignisse an. Die Schultertasten erkennst du so in deinem Tastatur-Handler:
function keyboardHandler(eventType, character, keycode, modifiers)
if string.match(character, "TRIGGERLEFT") then
if keycode > 1 then print("left trigger pressed") else print("left trigger released") end
elseif string.match(character, "TRIGGERRIGHT") then
if keycode > 1 then print("right trigger pressed") else print("right trigger released") end
end
return false
end
registerEventHandler("keyEvent", "keyboardHandler")
Ein Adventure lässt sich auf zwei Arten mit dem Gamepad steuern:
- Den Charakter direkt bewegen. Prüfe mit Aktionsbereichen oder Lua, ob der Charakter neben einem Objekt steht, mit dem er etwas tun kann. Wird die Aktionstaste gedrückt, prüfst du, ob er im Bereich oder in einem bestimmten Umkreis ist.
- Den Mauszeiger wie eine Maus bewegen.
Pro Ereignistyp ist nur ein Handler erlaubt (außer bei mainLoop). Hat dein Spiel schon einen Tastatur-Handler, baust du die Abfrage der Schultertasten dort ein. Einen vollständigen Tastatur-Handler findest du unter Überspringen von Videos und Zwischensequenzen verhindern.