Gefällt mir ...
Außerdem änder sich nun die Farbe der Kreise (Blaub keine Krafteinwirkung, Rot Krafteinwirkung?)
Außerdem "zerreißt" nun dieses Seil ...
Das mit der Beschleunigung ist mir nun klar
Jetzt wo das ding schon eigenermaßen "cool" ist, wäre es an der zeit mal die ProzedurNamen irgendwie "schöner" zu machen.
Vielleich mag es nur Tick von mir sein, möglichs alles irgendwie PB-Like aussehen zu lassen, aber ich finds dadurch "angenehmer" zu benutzen.
Ich würde es so
ähnlich anlegen wie die "PureBasic - Entity"-Lib ... zusammen mit deren Physik ...
So würde dann die Code-Veränderung aussehen:
Derzeit:
Code: Alles auswählen
;Anfangszeug wird erstellt
CreateParticle(50,400,15,0)
For i=1 To 10
CreateParticle(50+30*i,400,15,0.5)
CreateConstraint(particle(count\particle),particle(count\particle-1),1)
Next
Particle(count\particle)\m=0
Nach änderung von
- CreateParticle(...) -> CreateParticle(ParticleNumber, ...)
- CreateConstraint(...) -> CreateConstraint(ConstraintNumber, ...)
würde das ganze so aussehen:
Code: Alles auswählen
;Anfangszeug wird erstellt
For Index = 0 To 10
CreateParticle(Index, 50+Index*30, 400, 15, 0.5)
Next
SetParticleMass(0, 0)
SetParticleMass(10, 0)
For Index = 0 To 9
CreateConstraint(#PB_Any, Index, Index+1, 1)
Next
Die Nummerierung geht halt wie in PB entweder Direkt oder per Any und Rückgabe.
Sachen die "unwichtig sind" kann man einfach per Any erstellen.
Die Elemente der Physik in einem Array zu lagern ist in bezug aufs ansprechen sicherlich geeignet,
wenn ich mir jedoch so einige Sachen in bezug auf Hinzufügen und löschen angucke (DeleteParticle), macht es relativ viel arbeit das Array nicht zu "durchlöchern" (wenn du verstehst was ich damit meine)
(Wie ich das sehe, wird derzeit die
komplette Particle-Sammlung verschoben wann man das erste elemente löscht)
Ich finde eine LinkedList ist hier in jedemfall besser geeignet.
Normale abarbeitung der Elemente geht genau so gut mit ForEach.
Und wenns um Schachtlungen geht wie:
Code: Alles auswählen
For i=1 To count\particle
For j=1 To count\particle
If particle(i)\id<>particle(j)\id
If ProcessCollision(particle(i),particle(j)) ;jedes Object wir mit jedem auf Collision überprüft
EndIf
EndIf
Next
Next
Funktioniert das mit LinkedList:
Code: Alles auswählen
ForEach Particle()
*Particle.Particle = @Particle() ; äußere Liste sichern
ForEach Particle()
If Particle()\id<>*Particle\id
If ProcessCollision(Particle(),*Particle) ;jedes Object wir mit jedem auf Collision überprüft
EndIf
EndIf
Next
ChangeCurrentElement(Particle(), *Particle)
Next
Ich habe derzeit leider keine Zeit es selber zu machen.
Um den Ratschlag von c4s trotzdem nachzukommen, würde ich die genannten Sachen selber am Wochenende umsetzen.
Bis dahin kannst du mir ja sagen ob es oke wäre wenn ich es umschreibe, und wir dann mit dem umgeschriebenen arbeiten, oder du es gar selber machen willst.