Ergebnis 1 bis 15 von 15

Thema: Freebasic - Shooter Problem

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Okay, meine Abfrage sieht jetzt so aus:
    Code:
    If (LinieX1(i)-LinieX2(i))/(LinieY1(i)-LinieY2(i))=(LinieX1(i)-PunktX(a))/(LinieY2(i)-PunktY(a)) And( LinieX1(i)<=PunktX(a)<=LinieX2(i) Or LinieX2(i)<=PunktX(a)<=LinieX1(i) )And( LinieY1(i)<=PunktY(a)<=LinieY2(i) Or LinieY2(i)<=PunktY(a)<=LinieY1(i)) Then
    'Kollision
    Endif
    Jedoch geht's immer noch nicht! :/ Wieder das Problem, dass er meint, es träfe immer zu...

  2. #2
    Ich kenn mich mit FB nicht aus, aber DAS sieht nicht richtig aus ...

    LinieX1(i)<=PunktX(a)<=LinieX2(i)

    Das sieht aus, als ob da TRUE oder FALSE auf 0 bzw 1 gecastet wird und dann erst verglichen wird.

    Ich wuerde es als ((LinieX1(i)<=PunktX(a)) AND (PunktX(a)<=LinieX2(i))) formulieren.

    Den Vergleich mit den Y Werten kannst du dir sparen, es sei denn, du hast auch senkrechte Linien.

  3. #3
    Die Lösung für Delphi sähe folgendermaßen aus:
    Code:
    if (Liniex1 = Liniex2) and (Punktx = Liniex1) then
    if (((liniey1 <= liniey2) and ((liniey1 <= punkty) and (punkty <= liniey2))) or ((liniey1 >= liniey2) and ((liniey2 <= punkty) and (punkty <= liniey1)))) then
    result := true
    else
    result := false
    else
    if (Punkty = Liniey1 + ((Punktx - Liniex1) * (Liniey2 - Liniey1) / (Liniex2 - Liniex1)))
    and (((liniex1 <= liniex2) and ((liniex1 <= punktx) and (punktx <= liniex2))) or ((liniex1 >= liniex2) and ((liniex2 <= punktx) and (punktx <= liniex1))))
    and (((liniey1 <= liniey2) and ((liniey1 <= punkty) and (punkty <= liniey2))) or ((liniey1 >= liniey2) and ((liniey2 <= punkty) and (punkty <= liniey1)))) then
    result := true
    else
    result := false;
    Sicher ist das jetzt viel zu umständlich gedacht, und du musst es auch noch in die Sprache deiner Wahl umschreiben, aber immerhin - es funktioniert. ^^ (Hat zumindest bei zwanzig Tests funktioniert, natürlich kann ich für nichts garantieren...)

  4. #4
    Hm...
    Code:
    Rechnung1=(LinieX1(i)-LinieX2(i))/(LinieY1(i)-LinieY2(i))
    Rechnung2=(LinieX1(i)-PunktX(a))/(LinieY2(i)-PunktY(a))
    
    If Rechnung1=Rechnung2 And ((LinieX1(i)<=PunktX(a)) AND (PunktX(a)<=LinieX2(i))) Then
    Bla
    Geht nicht! xO
    Ich schau mir auch immer schön die Werte an, aber wenn der Punkt exakt auf der Linie ist, sind die Werte trotzdem völlig verschieden (Rechnung1=1.blubb, Rechnung2=0.1blubb).

  5. #5
    Zitat Zitat von Lloyd64 Beitrag anzeigen
    Hm...
    Code:
    Rechnung1=(LinieX1(i)-LinieX2(i))/(LinieY1(i)-LinieY2(i))
    Rechnung2=(LinieX1(i)-PunktX(a))/(LinieY2(i)-PunktY(a))
    Wenn du aus Rechnung2 folgendes machst, sollte es gehen :
    Code:
    Rechnung2=(LinieX1(i)-PunktX(a))/(LinieY1(i)-PunktY(a))

  6. #6
    Du kannst in FB "_" benutzen, um eine Anweisung über mehrere Zeilen zu strecken, z.B. so:

    Code:
    If (LinieX1(i)-LinieX2(i))/(LinieY1(i)-LinieY2(i)) = (LinieX1(i)-PunktX(a))/(LinieY1(i)-PunktY(a)) And _
      ((LinieX1(i)<=PunktX(a)) AND (PunktX(a)<=LinieX2(i)) Then
        ' Kollision
    EndIf
    Bringt mehr Übersichtlichkeit rein.

    mfG Cherry

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •