Hey,
gibt es eine einfache Möglichkeit zu kontrollieren ob 2 Bilder sich berühren? Z.b. dein Schwert und ein Zombie?
Ich hab schon mehrere Sachen ausprobiert, allerdings funktioniert das nicht ganz recht.
Hilfe wäre nett,
Mfg
Bilderkollision
-
- [ gelöst ]
-
Nakroma -
12. Februar 2012 um 15:41 -
Geschlossen -
Erledigt
-
-
Und von wo sind diese Bilder? Auf einem GUI? Hast du Position und grösse der Bilder?
Gruss Shadowigor
-
Ja, die befinden sich auf einer GUI. Größe und so sind natürlich vorhanden.
-
Noch ungetestet, aber es sollte funktionieren:
Spoiler anzeigen
[autoit]Func _Collides($PosX1, $PosY1, $SizeX1, $SizeY1, $PosX2, $PosY2, $SizeX2, $SizeY2)
[/autoit] [autoit][/autoit] [autoit]If ($PosX1 < $PosX2) And ($PosY1 < $PosY2) And ($PosX2 < ($PosX1 + $SizeX1)) And ($PosY2 < ($PosY1 + $SizeY1)) Then Return True
[/autoit] [autoit][/autoit] [autoit]If ($PosX1 > $PosX2) And ($PosY1 < $PosY2) And ($PosX1 < ($PosX2 + $SizeX2)) And ($PosY2 < ($PosY1 + $SizeY1)) Then Return True
[/autoit] [autoit][/autoit] [autoit]If ($PosX1 > $PosX2) And ($PosY1 > $PosY2) And ($PosX1 < ($PosX2 + $SizeX2)) And ($PosY1 < ($PosY2 + $SizeY2)) Then Return True
[/autoit] [autoit][/autoit] [autoit]If ($PosX1 > $PosX2) And ($PosY1 > $PosY2) And ($PosX2 < ($PosX1 + $SizeX1)) And ($PosY1 < ($PosY2 + $SizeY2)) Then Return True
[/autoit] [autoit][/autoit] [autoit]Return False
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] -
PosX1 ist Bild 1
PosX2 ist Bild 2
Mit Size genauso oder? -
Ja genau. Funktioniert es so?
-
Bei mir leider nicht
-
Wenns so nicht funktioniert weis ich auch nicht weiter:
Spoiler anzeigen
[autoit]Func _Collides($PosX1, $PosY1, $SizeX1, $SizeY1, $PosX2, $PosY2, $SizeX2, $SizeY2)
[/autoit] [autoit][/autoit] [autoit]If ($PosX1 < $PosX2) And ($PosY1 < $PosY2) And ($PosX2 < ($PosX1 + $SizeX1)) And ($PosY2 < ($PosY1 + $SizeY1)) Then Return True
[/autoit] [autoit][/autoit] [autoit]If ($PosX1 > $PosX2) And ($PosY1 < $PosY2) And ($PosX1 < ($PosX2 + $SizeX2)) And ($PosY2 < ($PosY1 + $SizeY1)) Then Return True
[/autoit] [autoit][/autoit] [autoit]If ($PosX1 > $PosX2) And ($PosY1 > $PosY2) And ($PosX1 < ($PosX2 + $SizeX2)) And ($PosY1 < ($PosY2 + $SizeY2)) Then Return True
[/autoit] [autoit][/autoit] [autoit]If ($PosX1 < $PosX2) And ($PosY1 > $PosY2) And ($PosX2 < ($PosX1 + $SizeX1)) And ($PosY1 < ($PosY2 + $SizeY2)) Then Return True
[/autoit] [autoit][/autoit] [autoit]Return False
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] -
Also bei mir funktionierts nicht, wenn du willst kann ich dir meinen code schicken
-
Da gibts auch etwas leichtgewichtigere Funktionen.
[autoit]Func _Kollision_Punkt_Viereck($x1, $y1, $x2, $y2, $b2, $h2)
[/autoit][autoit][/autoit][autoit]
Return ($x1 > $x2 And $y1 > $y2 And $x1 < $x2 + $b2 And $y1 < $y2 + $h2)
EndFuncFunc _Kollision_Kreis_Kreis($x1, $y1, $x2, $y2, $d1, $d2)
[/autoit][autoit][/autoit][autoit]
Return (($x1 - $x2) ^ 2 + ($y1 - $y2) ^ 2) ^ 0.5 < ($d1 / 2 + $d2 / 2)
EndFuncFunc _Kollision_Viereck_Viereck($x1, $y1, $b1, $h1, $x2, $y2, $b2, $h2)
[/autoit]
Return ($x1 + $b1 > $x2 And $y1 + $h1 > $y2 And $x1 < $x2 + $b2 And $y1 < $y2 + $h2)
EndFuncDamit kannst du verschiedene Kollisionen überprüfen.
z.B. Schwertspitze (Punkt) und Ballon (Kreis) oder
Bild1 (Viereck) und Bild2 (Viereck)
uswlg
M -
was sind in deinem beispiel h und b?
-
Höhe und Breite, vermutlich ...
-
b = Breite
h = Höhe
d = Durchmesser -
Danke, das funktioniert nun