[Lua] Alten und neuen Wert ermitteln

Nightmare85

Captain
Registriert
Apr. 2007
Beiträge
3.555
Hallo,

Lua verwende ich, da meine Logitech Gaming Software diese Sprache verwendet.
Ich bin der Programmierung bisher immer erfolgreich aus dem Weg gegangen.
(Dementsprechend ist auch mein Wissen.)
Aber nun darf auch ich die Vorteile der Programmierung nutzen.

In meinem Testprogramm möchte ich folgendes umsetzen:
Nach Klicken einer Maustaste soll die aktuelle Maustaste und die zuletzt angeklickte angezeigt werden.
Beispiel - 4 Mausklicks:
Maustaste 9: Anzeige = Alter Wert: 9, Neuer Wert: 9
Maustaste 7: Anzeige = Alter Wert: 9, Neuer Wert: 7
Maustaste 8: Anzeige = Alter Wert: 7, Neuer Wert: 8
Maustaste 8: Anzeige = Alter Wert: 8, Neuer Wert: 8
(Genau wie im Anhang)

Zu beachten ist, dass der erste alte Wert immer die 9 sein muss!
(Selbst wenn ich mit Maustaste 7 anfangen würde.)
Begründung:
Ich arbeite in einem Musikprogramm mit bestimmten Szenen und Szene 1 ist immer die Erste.
Die nächste Szene kann jede beliebige sein - aber die erste Alte wird immer die 1 sein.
Die Maustaste 9 ist symbolisch die Szene 1.

Bisher hab ich folgendes Skript, welches teilweise funktioniert:
(Die --Kommentare sind nur die Bezeichnung der jeweiligen Maustaste.)
Code:
function OnEvent(event, arg, mouse)

	if event == "MOUSE_BUTTON_PRESSED" and arg == 9 then --DPI plus
		buttonalt = 9
		buttonneu	 = 9
		OutputLogMessage("Letzter Button %d\n", buttonalt)		
		OutputLogMessage("Aktueller Button %d\n", buttonneu)
		buttonalt = buttonneu
	end

	if event == "MOUSE_BUTTON_PRESSED" and arg == 10 then --DPI minus
		buttonneu	 = 10
		OutputLogMessage("Letzter Button %d\n", buttonalt)		
		OutputLogMessage("Aktueller Button %d\n", buttonneu)
		buttonalt = buttonneu
	end

	if event == "MOUSE_BUTTON_PRESSED" and arg == 7 then --scroll left
		buttonneu	 = 7
		OutputLogMessage("Letzter Button %d\n", buttonalt)		
		OutputLogMessage("Aktueller Button %d\n", buttonneu)
		buttonalt = buttonneu
	end

	if event == "MOUSE_BUTTON_PRESSED" and arg == 8 then --scroll right
		buttonneu	 = 8
		OutputLogMessage("Letzter Button %d\n", buttonalt)		
		OutputLogMessage("Aktueller Button %d\n", buttonneu)
		buttonalt = buttonneu
	end

end

Folgendes Problem:
Aktuell setzt das Skript voraus, dass ich mit Maustaste 9 anfange.
Fange ich mit einer anderen an, kommt:
[string "LuaVM"]:13: bad argument #2 to 'OutputLogMessage' (number expected, got nil)
Logisch, da buttonalt nicht bekannt ist.

Deklariere ich buttonalt im Programmkopf mit 9, dann ist der alte Wert immer 9.
Meine Idee war es, im Programmkopf folgendes zu schreiben:
Code:
i = 0
if i < 0 then buttonalt = 9
Und dann am Ende jeder anderen if-Abfrage ein i = 1 zu schreiben.
Das klappt aber nicht - buttonalt ist dann trotzdem immer 9...
Das i = 0 im Kopf überschreibt anscheinend die 1.

Danke für jede Hilfe!

P.S. Spricht man es eigentlich lua oder L.U.A. aus?

Grüße
 

Anhänge

  • Mausklick-Skript2.jpg
    Mausklick-Skript2.jpg
    99,5 KB · Aufrufe: 189
Grüße,

vertausch mal bitte Zeile 4 mit Zeile 2 :)
Er kann schlecht den alten Wert rausrücken wenn die Variable noch nicht initialisiert ist (also einen ersten Wert übergeben bekommen hat)
 
Hi,

das hatte ich schon probiert.
Dann wäre buttonalt immer 9.
Also wenn ich dann mehrmals nacheinander z.B. Button 7 drücke,
steht da trotzdem:
Letzter Button 9, Aktueller Button 7
Es müsste aber 7, 7 stehen
(Beim 2. Mal)

Grüße
 
Hallo,

kannst du die Variable direkt beim Deklarieren auch initialisieren? bzw auserhalb der Funktion den wert festlegen?
 
Code:
    function OnEvent(event, arg, mouse)
     
    	if event == "MOUSE_BUTTON_PRESSED" and arg == 9 then --DPI plus
    		buttonalt = 9
    		buttonneu	 = 9
    		OutputLogMessage("Letzter Button %d\n", buttonalt)		
    		OutputLogMessage("Aktueller Button %d\n", buttonneu)
    		buttonalt = buttonneu
    	end
     
    	if event == "MOUSE_BUTTON_PRESSED" and arg == 10 then --DPI minus
    		buttonneu	 = 10
    	if buttonalt > 0 then OutputLogMessage("Letzter Button %d\n", buttonalt)		
                else OutputLogMessage("Letzter Button %d\n", 9)
    		OutputLogMessage("Aktueller Button %d\n", buttonneu)
    		buttonalt = buttonneu
    	end
end

Sollte gehen.
 
Hallo,

wäre das nicht das, was ich gerade gemacht habe?
Also buttonalt = 9 in Zeile 2.
So wie ich es gelesen habe, muss man bei lua keine Variablen deklarieren,
sondern bei Bedarf erzeugen.

Wenn ich in Zeile 2 buttonalt = buttonneu schreibe,
kommt beim ersten Mausklick auch die Fehlermeldung.
Bei den anderen Klicks klappt es dann einwandfrei.
Ist aber auch keine echte Lösung, zumal der erste alte Wert dann nicht 9 ist,
wenn ich mit einem anderen Mausklick anfange.

Irgendwie muss der erste Wert von buttonalt vergessen werden,
sobald ein neuer Wert zugewiesen wird...
Gegen buttonalt = 9 in Zeile 2 hab ich nichts, aber dieser Wert
darf wie gesagt nur 1x am Anfang gelesen werden.

Edit
Hallo firexs,
danke für den Code.
Der Editor schreibt:
[string "LuaVM"]:13: attempt to compare number with nil

Wenn ich dann Maustaste 9 klicke, steht dann zwar Alter und neuer Wert 9,
aber wenn ich die 10 klicke, bleiben der alte und der neue Wert immer noch bei 9

2 Fragen:
1. Fehlt ein End bei Zeile 12?
2. Setzt dies voraus, dass ich mit Mausklick 9 anfange? Ich müsste auch mit einer anderen anfangen können.

Grüße
 
Zuletzt bearbeitet:
Dann mach es wie in meinem Beispiel. Wenn es keinen Wert gibt, wird 9 ausgegeben. Man kann auch dabei den Wert direkt auf 9 setzen.

In jedem anderen Fall, wenn es einen Wert gibt, der Größer als 0 ist, wird dieser Übernommen.

Verschachtelte IF Sätze.

Vermutlich geht das ganze auch komplett als 3Zeiler, aber so ein Crack bin ich nun auch wieder nicht :p
 
Ne, das klappt leider nicht.
Wenn ich deinen Code von oben einfüge, kommt als erster Fehler:
Syntax Error: Line: 17
Füge ich dann in Zeile 18 ein end ein, kommt dieser Fehler, sobald ich eine Maustaste!=9 betätige:
[string "LuaVM"]:13: attempt to compare number with nil
Betätige ich Maustaste 9, steht dann immer Letzter Button 9, Aktueller Button 9.
Auch wenn ich dann eine andere betätige.

Mal eine ganz andere Frage:
Besteht in der Programmierung nicht allgemein die Möglichkeit, eine Variable nur einmal zu verwenden
und diese dann zu eliminieren?
Weil dann würde ich wirklich mit i =1 anfangen und das i dann lahm legen.

Grüße
 
Im Quellcode aus Post #1 muss Zeile 4 vor Zeile 1 geschoben werden - dann klappt es.
Danke für eure Hilfe.

Grüße
 
Zurück
Oben