Blackout...Abprallen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Jo0oker

Betreff: Blackout...Abprallen

BeitragFr, Mai 18, 2007 10:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo leute,
ich habe gerade ein komplettes Blackout,
wie kann ich nochmal mit hilfe eier kollision zwei sich bewegende objekte mit ein ander abprallen lassen?
P.S.: die hilfe hat mir nicht sehr geholfen.

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!
 

FBI-blitz

BeitragFr, Mai 18, 2007 10:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit dieser Funktion: http://blitzbase.de/befehle2d/imagescollide.htm
(oder anderen Kollisionsbefehlen).

Du prüfst, ob sie kollidieren und wenn ja, dann änderst du einfach die Richtung der beiden Objekte.
Computer 1: AMD Athlon64 3500+ | nVidia GF 7900GT | 1024 MB DDR-RAM | ASUS A8N-SLI Preimium | 250 GB SATA 2 || WindowsXP | Blitz3D | Blitz+
Computer 2: AMD AthlonXP 2400+ | ATI Radeon 9500 | 512 MB DDR-RAM | MSI K7N2 | 80 GB IDE | 160 GB IDE || WindowsXP | Blitz3D | Blitz+
Computer 3: Intel Pentium MMX | onBoard-Grafik | 32 MB RAM | 1 GB IDE || Windows 98 SE | Blitz+

Jo0oker

BeitragFr, Mai 18, 2007 10:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber damit pralllen die och noch lange nicht von ein ander ab.
Um genauer zu werden, es sind zwei Autos
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

darth

BeitragFr, Mai 18, 2007 11:01
Antworten mit Zitat
Benutzer-Profile anzeigen
einprallwinkel = abprallwinkel
mit der imagecollision testest du nur WANN du abprallen sollst.
angenommen es geht darum dass ein ball in einem bestimmten winkel auf eine gerade wand trifft (also z.b die obere kante des bildschirms) kehrst du einfach die y geschwindigkeit.
ist die wand NICHT gerade sondern hat einen eigenen winkel, dann musst du den vektor mit der wand schneiden, den winkel bestimmen und den ausschleuder vektor berechnen - welcher dann die neue geschwindigkeit wird.
Diese Signatur ist leer.

Jo0oker

BeitragFr, Mai 18, 2007 11:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke,
gibt es irgendwo ein Sample, wo ich die erechnung der Koordinaten mir mal anschauen kann?
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!
 

FWeinb

ehemals "ich"

BeitragFr, Mai 18, 2007 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja das giebt es ist sogar von ihr aber über die suche nicht einfachzu finden ^^ also ihr der code ^^

Ist nicht von mir geht aber super

Code: [AUSKLAPPEN]


Graphics 800,600,32,2
SetBuffer(BackBuffer())

Global int_x#,int_y#
Global mx1# = 400
Global my1# = 300

Type colli
   Field x1#,y1#
   Field x2#,y2#
End Type

createLine(0,300,300,450)
createLine(300,450,600,400)
createLine(600,400,800,300)

timer = CreateTimer(25)
While Not KeyHit(1)
   WaitTimer(timer)
   Cls
   
   mx2# = MouseX()
   my2# = MouseY()
   
   Color(255,255,255)
   Line(mx1,my1,mx2,my2)

   For l.colli = Each colli
      Color(255,255,255)
     
      Line(l\x1,l\y1,l\x2,l\y2)
      ;--
           
      If LinesCross(l\x1#,l\y1#, l\x2#,l\y2#, 400,300, MouseX(),MouseY())
         
         ;delta Kollisionslinie errechnen
         dx# = l\x1 - l\x2
         dy# = l\y1 - l\y2
         
         ;die Magnitude(Vektorlänge)
         mag# = Sqr(dx^2 + dy^2)
         
         ;Vektor Normale (aufrecht auf der Colli-linie)
         nx# = dy / mag
         ny# = -dx / mag
         
         ; zeichnen der Normale
         Color(20,255,20)
         Line(int_x,int_y,int_x+nx*30,int_y+ny*30)
         ;--
         ;nun das ganze für den eintritts-vektor
         mdx# = int_x - mx1
         mdy# = int_y - my1
         
         mmag# = Sqr(mdx^2 + mdy^2)
         
         mnx# = mdx / mmag
         mny# = mdy / mmag
         
         ;--
         ;das Punktprodukt von eintritts-vektor und Liniennormale
         vdotN# = mdx * nx + mdy * ny
         
         ; hier wird die Reflektion errechnet
         NFx# = -2.0 * Nx# * VdotN#
         NFy# = -2.0 * Ny# * VdotN#
         Vx# = mdx# + NFx#
         Vy# = mdy# + NFy#
   
         ;neuen Vektor zeichnen
         Color(20,20,255)
         Line(int_x,int_y,int_x+vx,int_y+vy)
         
         ;hier nochmal den Kollisionspunkt zeichnen
         Color(255,20,20)
         Line(l\x1,l\y1,l\x2,l\y2)
         Oval(int_x-2,int_y-2,5,5)
      End If
   Next
     
   Flip()
Wend
End

Function createLine(x1#,y1#,x2#,y2)
   l.colli = New colli
   l\x1 = x1
   l\y1 = y1
   l\x2 = x2
   l\y2 = y2
End Function

Function LinesCross(x0#,y0#, x1#,y1#, x2#,y2#, x3#,y3# )   
   n# = (y0#-y2#)*(x3#-x2#) - (x0#-x2#)*(y3#-y2#)
   d# = (x1#-x0#)*(y3#-y2#) - (y1#-y0#)*(x3#-x2#)
   
   If Abs(d#) < 0.0001
      Return False
   Else
      Sn# = (y0#-y2#)*(x1#-x0#) - (x0#-x2#)*(y1#-y0#)

      AB# = n# / d#
      If AB#>0.0 And AB#<1.0
         CD# = Sn# / d#
         If CD#>0.0 And CD#<1.0
            int_X# = x0# + AB#*(x1#-x0#)
            int_Y# = y0# + AB#*(y1#-y0#)
            Return True
         End If
      End If
   
   EndIf


   Return False

End Function
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group