Kollisionen
Eine Kollision im echten Leben, das wäre zum Beispiel der Zusammenprall zweier Gegenstände. Auch beim Programmieren kann bzw. braucht man manchmal "Kollisionen". Was Kollisionen in Lua sind und wann man sie braucht, das erfahrt ihr in diesem kleinen Tutorial:
Nehmen wir einfach mal an, wir haben das Bild eines Balles geladen und geben den Ball mit den vorher definierten Variablen x und y aus. Im Mainloop vergrößern wir x ständig, das hat zur Folge, dass der Ball immer weiter nach rechts gelangt, solange, bis wir einschreiten und ihm einen Riegel vorschieben. Wir teilen dem Luaplayer mittels eines if-Blocks mit, dass der Wert von x ab einer bestimmten Position nicht mehr vergrößert wird bzw ihm sogar im Gegensatz wieder etwasabgezogen wird. Dadurch entsteht sozusagen eine unsichtbare Mauer, an der der Ball abprallt. Unsere erste kleine "Kollision"!
if x > 480 then x=480 end
In diesem Fall nennt man das eine "Kollisionsabfrage". Wenn man nun will, dass sich x beim Erreichen des Grenzwertes wieder andauernd verkleinert, der muss sich eines Tricks bedienen. Wir bauen eine Variable für den "Modus" ein.
ball = Image.load("ball.png") x = 100 y = 100 modus = 0 while true do if modus == 0 then x = x + 1 end if x>480 then modus = 1 end if modus == 1 then x = x - 1 end if x < 0 then modus = 0 end screen.flip() screen.waitVblankStart() end
Der Trick ist ganz einfach: Am Anfang ist die Variable Modus gleich 0. Wenn der Modus gleich 0 ist, dann wird x ständig vergrößert. Wenn der Modus gleich 1 ist, dann wird x ständig verkleinert. Wenn x nun größer als 480 wird, dann wechselt auch der Modus, was zur Folge hat, dass sich der Wert ständig verkleinert, bis zur Kollisionsabfrage für x kleiner 0. Dann wechselt der Modus wieder zu 0 und der Wert von x wird wieder vergrößert.
Hier sieht das alles noch recht einfach aus, was es zweifellos auch ist. Die Kollisionsabfrage wird erst bei verschiedenen Flächenformen wie Kreise, Ellipsen oder Dreiecken relativ schwer...