2016-04-06 5 views
0

In meiner Simulation wird die Farbe des Planeten zufällig ausgewählt, wenn er erstellt wird. Der zurückgelassene Weg soll die gleiche Farbe wie sein Planet haben. Das funktioniert gut, wenn es nur einen Planeten gibt, aber wenn ein neuer Planet hinzugefügt wird, hat die Spur für jeden Planeten die gleiche Farbe wie die des neuen Planeten. Hier sind einige Screenshots, um zu demonstrieren, was ich meine: https://imgur.com/a/EVh5oVB.net Gravitationssimulation - Probleme beim Verlassen von Spuren hinter Planeten

Ich jeden Planeten eine Spur die gleiche Farbe wie sich selbst haben, wenn das Sinn macht. Hier sind die relevanten Teile meines Codes:

Public Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles picSpace.Paint 
    For Each sun In sunsList 
     e.Graphics.FillEllipse(Brushes.Yellow, CInt(sun.positionX - 10), CInt(sun.positionY - 30), 20, 20) 
    Next 
    For Each planet In planetsList 
     Dim planetFill As Brush = New SolidBrush(planet.colour) 
     Dim trailColour As Pen = New Pen(planet.colour) 
     e.Graphics.FillEllipse(planetFill, planet.displayX - 5, planet.displayY - 5, 10, 10) 
     For count As Integer = 0 To counter 
      e.Graphics.DrawEllipse(trailColour, trail(0, count), trail(1, count), 1, 1) 
     Next 
    Next 
End Sub 

Sub Position() 
    planet.displayX = Math.Round(planet.positionX) 
    planet.displayY = Math.Round(planet.positionY) 
    trail(0, counter) = planet.displayX 
    trail(1, counter) = planet.displayY 
    counter += 1 
    ReDim Preserve trail(1, counter) 
End Sub 

Private Sub space_Click(sender As Object, e As EventArgs) Handles picSpace.Click 
    If hsbSimulationSpeed.Value > 0 Then 
     Timer1.Enabled = True 
    End If 
    If chkAddPlanets.Checked = True Then 
     planet = New Body 
     numberOfPlanets += 1 
     planet.colour = GetRandomColour() 
     planet.positionX = MousePosition.X 
     planet.positionY = MousePosition.Y - 25 
     planet.velocityX = txtVelocityX.Text * 1000 
     planet.velocityY = txtVelocityY.Text * 1000 
     planetsList.Add(planet) 
    ElseIf chkAddSuns.Checked = True Then 
     sun = New Body 
     numberOfSuns += 1 
     sun.positionX = MousePosition.X 
     sun.positionY = MousePosition.Y 
     sun.mass = hsbSunMass.Value * 5 * (10^29) 
     sunsList.Add(sun) 
    End If 
End Sub 

Function GetRandomColour() As Color 
    Dim rand As New Random 
    Return Color.FromArgb(rand.Next(0, 256), rand.Next(0, 256), rand.Next(0, 
    256)) 
End Function 

Gibt es eine einfache Möglichkeit, dies zu beheben, oder werde ich brauchen, um vollständig die Art und Weise Pfade erzeugt werden ändern?

+0

Ich verstehe nicht, was die for-Schleife tut –

Antwort

0

Das Problem ist, dass Sie nur eine Liste trail() haben, die für alle Planeten verwendet wird. Obwohl die Planetenschleife für jeden Planeten einen anderen Stift auswählt, zeichnen sie alle in den gleichen Koordinaten. Der letzte Planet wird die ersten überschreiben. Vermutlich enthält trail() die Koordinaten von allen Planeten - also alle zusammen aufgeführten Wege.

Sie müssen eine Trail-Liste pro Planet als Teil des Planeten-Objekts haben, damit es funktioniert.

+0

trail() ist ein dynamisches Array, keine Liste. Ich habe versucht, es zu einer Eigenschaft des Planeten zu machen, aber Visual Studio sagt, dass "automatisch implementierte Eigenschaften keine Parameter haben können". Hast du irgendwelche Vorschläge? – Lee

+0

Trail muss innerhalb des Planeten sein, um die Logik für Ihr System richtig zu bekommen. _How_ ist eine andere Frage, und Sie müssen möglicherweise eine andere Frage stellen, wenn Sie stecken bleiben. Für den Fehler, den Sie hatten, gibt es 2 offensichtliche Lösungen: Entweder entfernen Sie das Wort 'property', so dass es nur eine öffentliche Variable innerhalb der Planet-Klasse ist. Oder machen Sie es nicht automatisch implementiert - füllen Sie das 'get' und' set' dafür aus - wenn Sie am besten damit aufhören, eine neue Frage zu stellen, oder besser: ** Suche **, da das gleiche Problem fast schon besteht sicherlich schon gefragt worden. –