Hallo,
Die Kollisionsabfrage habe ich bereits, das könnt ihr aus dem Sourcecode entnehmen.
In dem Code steht die Gesamte Physik-Engine, also alles was man braucht um mir evtl. helfen
zu können.
Es handelt sich um 2+n Bälle die sich Physikalisch korrekt Verhalten in einem System
mit Gravitation. Kollision am Rand klappt gut, auch die Kollisionserkennung zwischen
den Bällen. Das problem ist nur. Sobald die Bälle in Ruhe sind und z.b "Aufeinander" liegen.
Sinken sie langsam runter. Ich kann es da nicht so einfach Lösen wie mit dem Border.
Seht selbst:
Hier das Gesamte Projekt zum Download:
Download
Die Kollisionsabfrage habe ich bereits, das könnt ihr aus dem Sourcecode entnehmen.
In dem Code steht die Gesamte Physik-Engine, also alles was man braucht um mir evtl. helfen
zu können.
Es handelt sich um 2+n Bälle die sich Physikalisch korrekt Verhalten in einem System
mit Gravitation. Kollision am Rand klappt gut, auch die Kollisionserkennung zwischen
den Bällen. Das problem ist nur. Sobald die Bälle in Ruhe sind und z.b "Aufeinander" liegen.
Sinken sie langsam runter. Ich kann es da nicht so einfach Lösen wie mit dem Border.
Seht selbst:
Hier das Gesamte Projekt zum Download:
Download
Quellcode
- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
- Dim aN As Single
- Dim bN As Single
- Render.Refresh()
- Render.BackColor = Color.Black
- For i = 0 To Ball_IndX
- If MoVinG(i) = 0 Then
- speedY(i) += gravity
- speedY(i) += ay(i)
- speedX(i) += ax(i)
- speedY(i) *= friction
- speedX(i) *= friction
- ball_loc_x(i) += speedX(i)
- ball_loc_y(i) += speedY(i)
- '// Collision with other Balls:
- bCenterX(i) = ball_loc_x(i) + 25
- bCenterY(i) = ball_loc_y(i) + 25
- If Ball_IndX > 0 Then
- For x = 0 To 10
- a = bCenterX(i) - (ball_loc_x(x) + 25)
- b = bCenterY(i) - (ball_loc_y(x) + 25)
- If a = 0 Or b = 0 Then
- If b = 0 Then Abstand = Abs(a)
- If a = 0 Then Abstand = Abs(b)
- Else
- Abstand = Sqrt((Abs(a) ^ 2) + (Abs(b) ^ 2))
- End If
- Label10.Text = b
- If Abstand < 50 And Abstand <> 0 Then
- speedX(i) *= -1
- speedY(i) *= -1
- ball_loc_y(i) = ball_loc_y(x) - 25
- ' ++++ 'Genau hier ist das Problem. Entweder ich lasse die Zeile mit ball_loc_y(i) stehen
- 'dann hüpft der ball allerdings nicht mehr zurück sondern bleibt sofort "kleben".
- Oder ich entferne deise Zeile und nach dem beide Bälle in ruhe sind, sinkt der obere
- in den unteren... :-(
- 'Render.BackColor = Color.White
- End If
- Next
- End If
- '// Collision with Walls
- If ball_loc_y(i) > bottom_side Then
- ball_loc_y(i) = bottom_side
- speedY(i) *= -1
- ElseIf ball_loc_y(i) < 0 Then
- ball_loc_y(i) = 0
- speedY(i) *= -1
- End If
- If ball_loc_x(i) > right_side Then
- ball_loc_x(i) = right_side
- speedX(i) *= -1
- ElseIf ball_loc_x(i) < 0 Then
- ball_loc_x(i) = 0
- speedX(i) *= -1
- End If
- Label1.Text = "Location X: " & ball_loc_x(0)
- Label2.Text = "Location Y: " & ball_loc_y(0)
- Label3.Text = "Speed X: " & speedX(0)
- Label4.Text = "Speed Y: " & speedY(0)
- Label5.Text = "Acceleration X: " & ax(0)
- Label6.Text = "Acceleration Y: " & ay(0)
- Label7.Text = "Friction: " & friction
- Label8.Text = "Gravity: " & gravity
- End If
- Next
- End Sub