Hallo,
ich bin mit meiner Kreiskollisionsabfrage weiter gekommen.
Habe mich dann an den Mathe Unterricht erinnert und Vektoren benutzt für die
Kollisionsreaktion.
Allerdings hab ich immer noch einige Probleme und hoffe, dass ihr mir helfen könnt:
1. - Die Kollisionsabfrage ist zu träge: Meine FPS sinkt je mehr Kreise ich habe
und umso träger reagieren alle Kollisionen. Liegt wahrscheinlich daran, dass ich in einem
Timer zwei For - Next Schleifen habe, aber ich wüsste jetzt keine andere Lösung
2. - Die Kreise können nicht aufeinander liegen bleiben!
2.2 - Wenn ein Kreis einen stehenden ganz vorsichtig berührt, springt der ruhende Kreis einfach zu schnell Weg!
Sourcecode zum Download: 85.25.20.208/mindcode/CiCol.rar
Könntet ihr mir da bitte helfen ?
Liebe Grüße,
Philipp
ich bin mit meiner Kreiskollisionsabfrage weiter gekommen.
Habe mich dann an den Mathe Unterricht erinnert und Vektoren benutzt für die
Kollisionsreaktion.
Allerdings hab ich immer noch einige Probleme und hoffe, dass ihr mir helfen könnt:
1. - Die Kollisionsabfrage ist zu träge: Meine FPS sinkt je mehr Kreise ich habe
und umso träger reagieren alle Kollisionen. Liegt wahrscheinlich daran, dass ich in einem
Timer zwei For - Next Schleifen habe, aber ich wüsste jetzt keine andere Lösung
2. - Die Kreise können nicht aufeinander liegen bleiben!
2.2 - Wenn ein Kreis einen stehenden ganz vorsichtig berührt, springt der ruhende Kreis einfach zu schnell Weg!
Sourcecode zum Download: 85.25.20.208/mindcode/CiCol.rar
VB.NET-Quellcode
- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
- Render.Refresh()
- For i = 0 To Ball_IndX
- If MoVinG(i) = 0 Or MoVinG(i) = 1 Then
- '// Moving Routines
- 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) + Hsize
- bCenterY(i) = ball_loc_y(i) + Hsize
- If Ball_IndX > 0 Then
- For x = 0 To Ball_IndX
- a = bCenterX(i) - (ball_loc_x(x) + Hsize)
- b = bCenterY(i) - (ball_loc_y(x) + Hsize)
- 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
- Label11.Text = Abstand.ToString
- '// Collision Reaction (Vektors)
- If bGrav = 0 Then
- If Abs(Abstand) < BSize And Abstand <> 0 Then
- VeKY = (bCenterY(x) - bCenterY(i)) / 2
- VekX = (bCenterX(x) - bCenterX(i)) / 2
- speedX(i) -= (VekX * 0.1)
- speedY(i) -= (VeKY * 0.1)
- End If
- Else
- If Abs(Abstand) < 1000 And Abstand <> 0 Then
- VeKY = (bCenterY(x) - bCenterY(i)) / 2
- VekX = (bCenterX(x) - bCenterX(i)) / 2
- speedX(i) += ((VekX * 0.01))
- speedY(i) += ((VeKY * 0.01))
- End If
- 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
- End If
- Next
- FPS = FPS + 1
- End Sub
Könntet ihr mir da bitte helfen ?
Liebe Grüße,
Philipp
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MindCode“ ()