Circle Physic Engine Userlib

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: Circle Physic Engine Userlib

Beitrag von DrShrek »

oh... well?! hat geschrieben:Den Error bekomm ich auch. Hab bis jetzt nur absolut keine Ahnung warum, weil es für mich keinen Sinn macht. Also irgendwie liegt der Fehler in der GroupParticle() Procedure. Vielleicht stimmt was mit der Logik einfach nich... wär erfreut wenn ihr da helfen könntet.
zum Erklären:
Hier eine schnelle (nicht ideale) Lösung:
Vor jeden If constraint()\p1\... ein If constraint()\p1 setzen.

ein Beispiel:

Code: Alles auswählen

   ;Render Constraints
   ForEach constraint()
      If constraint()\p1\image=0 And constraint()\p2\image=0
         FrontColor(RGB(255,0,100))
         LineXY(constraint()\p1\p\x,constraint()\p1\p\y,constraint()\p2\p\x,constraint()\p2\p\y)
       EndIf
   Next
Nachher:

Code: Alles auswählen

   ;Render Constraints
   ForEach constraint()
     If constraint()\p1
      If constraint()\p1\image=0 And constraint()\p2\image=0
         FrontColor(RGB(255,0,100))
         LineXY(constraint()\p1\p\x,constraint()\p1\p\y,constraint()\p2\p\x,constraint()\p2\p\y)
       EndIf
       EndIf
   Next
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
oh... well?!
Beiträge: 98
Registriert: 21.07.2010 10:46
Computerausstattung: Intel Pentium D 2,8 GHz
2 GB RAM
ATI RADEON X700 SE

Zweitrechner :
Intel Pentium M 1,6 GHz
1 GB RAM
Intel 82852/82855 GM/GME Graphics Controller (64 MB)

Re: Circle Physic Engine Userlib

Beitrag von oh... well?! »

scheint zu funktionieren^^. Dann liegt der Fehler ja garnicht in der GroupParticle() Procedure.
Aber ich versteh nicht warum ein Constraint einen falschen Pointer bekommt. Voraldingen weil der Pointer nach erstellen des Constraints ja nichmehr geändert wird.

Ohne die Attract() Procedure is mir der Fehler bis jetzt noch nich passiert...
Bei Attract() werden Constraints zwischen berührenden Particeln erstellt um den schleimigen Effekt zu erzeugen. Die Constraints reißen (werden zerstört) je nach dem wie groß das attract-Attribut der jeweiligen Particlen ist.
Bild it's Monkey Buissness
Homepage
facebook
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: Circle Physic Engine Userlib

Beitrag von DrShrek »

oh... well?! hat geschrieben:scheint zu funktionieren^^. Dann liegt der Fehler ja garnicht in der GroupParticle() Procedure.
Aber ich versteh nicht warum ein Constraint einen falschen Pointer bekommt. Voraldingen weil der Pointer nach erstellen des Constraints ja nichmehr geändert wird.

Ohne die Attract() Procedure is mir der Fehler bis jetzt noch nich passiert...
Bei Attract() werden Constraints zwischen berührenden Particeln erstellt um den schleimigen Effekt zu erzeugen. Die Constraints reißen (werden zerstört) je nach dem wie groß das attract-Attribut der jeweiligen Particlen ist.
Da ist halt noch ein dicker fetter Pointer BUG drinnen.
Optimieren lässt sich auch noch einiges.
Satt DynamicListen nimm besser Maps
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Circle Physic Engine Userlib

Beitrag von c4s »

Ein Physik-Fehler:
1) Warten bis eine der "Ketten" eingefroren wurde
2) Äußerstes Element dieser Kette bewegen, ohne das eine Kollision stattfindet
3) Man sieht nun, dass der Rest der Kette weiterhin eingefroren bleibt, obwohl er sich bewegen sollte
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
oh... well?!
Beiträge: 98
Registriert: 21.07.2010 10:46
Computerausstattung: Intel Pentium D 2,8 GHz
2 GB RAM
ATI RADEON X700 SE

Zweitrechner :
Intel Pentium M 1,6 GHz
1 GB RAM
Intel 82852/82855 GM/GME Graphics Controller (64 MB)

Re: Circle Physic Engine Userlib

Beitrag von oh... well?! »

@c4s
Jab, is mir auch schon aufgefallen.
Das liegt daran, dass die Particel "aufgetaut" werden, wenn sich die alte Position eines der Particeln der Gruppe von der neuen Position des selben Particles unterscheidet. Wenn man aber im Testprogramm ein statisches Particel bewegt (m=0) verändert man die alte und neue Position gleichermaßen, also wird kein Unterschied festgestellt.

Man kann jedoch ganz einfach das Particel manuell auftauen indem man eine kleine Änderung in der controls() Procedure ("Testprogram list.pb") macht.

Code: Alles auswählen

   If MouseButton(2) And *SelectedParticle<>#Null
       vect(*SelectedParticle\p,MouseX(),MouseY())  
       If *SelectedParticle\m=0
          vect(*SelectedParticle\oldp,*SelectedParticle\p\x,*SelectedParticle\p\y)
       EndIf
   Else
      *SelectedParticle=PointToParticle(MouseX(),MouseY(),5)
   EndIf
wird zu :

Code: Alles auswählen

   If MouseButton(2) And *SelectedParticle<>#Null
       vect(*SelectedParticle\p,MouseX(),MouseY())  
       If *SelectedParticle\m=0
          vect(*SelectedParticle\oldp,*SelectedParticle\p\x,*SelectedParticle\p\y)
          *SelectedParticle\freezed=0   ;<<----------------
       EndIf
   Else
      *SelectedParticle=PointToParticle(MouseX(),MouseY(),5)
   EndIf
Bild it's Monkey Buissness
Homepage
facebook
Antworten