Seite 1 von 1
Linien Kollision 2d [erledigt]
Verfasst: 27.11.2007 23:41
von a14xerus
Ich habe ein Problem...
Sagen wirmal ich habe ein schwarzes Sprite.
Darauf ist eine LineXY in "nicht-schwarz"..
Jetzt kommt eine andere Linie die anhalten soll, sobald sie die erste Linie berührt.
Wie kann ich das machen??
mit Point geht es nicht, da pro frame mehrere Pixel übersprungen werden.
Danke im Voraus
Verfasst: 28.11.2007 00:22
von NicTheQuick
Das müsste eigentlich ganz einfach und exakt mit ein bisschen
Vektorrechnung gehen. Bin aber grad zu faul um mich da hinzusetzen.
Morgen vielleicht.
Ansonsten kann ich noch auf meine uralten Kollisionsroutinen verweisen:
Schnelle Kollisionsroutinen
Verfasst: 28.11.2007 02:19
von STARGÅTE
Jup genau, entweder dieser LINK da, kannst aber auch meine benutzen, extra für Strecke-Strecke-Kollision:
Code: Alles auswählen
;Vektorstruktur
Structure Vektor2D
x.f
y.f
EndStructure
;Strecke |--|
Structure Strecke
Position.Vektor2D
Richtung.Vektor2D ; WICHTIG, damit wird auch die exakte länge der Strecke festgelegt
EndStructure
;Punkt
Structure Punkt
Position.Vektor2D
EndStructure
Procedure ParameterStrecke(*Strecke.Strecke,x,y,xx,yy)
*Strecke\Position\x = x
*Strecke\Position\y = y
*Strecke\Richtung\x = xx
*Strecke\Richtung\y = yy
EndProcedure
Procedure SchnittpunktStreckeStrecke(*Strecke1.Strecke, *Strecke2.Strecke, *Punkt.Punkt)
u.f : o.f : i.f : j.f
u = *Strecke1\Richtung\x * *Strecke2\Richtung\y - *Strecke1\Richtung\y * *Strecke2\Richtung\x
If u
o = (*Strecke2\Position\x - *Strecke1\Position\x) * *Strecke2\Richtung\y + (*Strecke1\Position\y - *Strecke2\Position\y) * *Strecke2\Richtung\x
i = (o/u)
If i>=0 And i<=1
u = *Strecke2\Richtung\x * *Strecke1\Richtung\y - *Strecke2\Richtung\y * *Strecke1\Richtung\x
o = (*Strecke1\Position\x - *Strecke2\Position\x) * *Strecke1\Richtung\y + (*Strecke2\Position\y - *Strecke1\Position\y) * *Strecke1\Richtung\x
j = (o/u)
If j >= 0 And j<=1
*Punkt\Position\x = *Strecke1\Position\x + i * *Strecke1\Richtung\x
*Punkt\Position\y = *Strecke1\Position\y + i * *Strecke1\Richtung\y
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
EndProcedure
Beispiel:
Code: Alles auswählen
Strecke1.Strecke
Strecke2.Strecke
ParameterStrecke(Strecke1, 0,0,100,100)
ParameterStrecke(Strecke2, 100,0,-100,100)
; Entspricht den Parametern von Line(x, y, Breite, Höhe [, Farbe]))
Punkt.Punkt
If SchnittpunktStreckeStrecke(Strecke1, Strecke2, Punkt)
Debug "KOLLISION"
Debug "bei ( "+StrF(Punkt\Position\x)+" | "+StrF(Punkt\Position\x)+" )"
Else
Debug "KEINE Kollision"
EndIf
Verfasst: 28.11.2007 07:47
von a14xerus
ich gucks mir heute mittag mal genauer an und guck ob ichs verstehe.
Auf jedenfalls Danke schonmal
