PureBasic 4.0 FINAL: Bug in der PhysicEngine[GELÖST/GEKLÄRT]

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

PureBasic 4.0 FINAL: Bug in der PhysicEngine[GELÖST/GEKLÄRT]

Beitrag von hardfalcon »

Hi, bei folgendem Code sollten eigentlich 6 Entities runterfallen, es fallen aber nur 4 runter. Im Klartext: ein Entity mit #PB_Entity_StaticBody wird von der PhysicEngine ignoriert. Hier das Codebeispiel:

Code: Alles auswählen

IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
  Add3DArchive("Data\"          , #PB_3DArchive_FileSystem)
  Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
  InitSprite()
  InitKeyboard()
  InitMouse()
  If Screen3DRequester()
    LoadMesh   (0, "Robot.mesh")
    CreateMaterial(0, LoadTexture(0, "r2skin.jpg"))
    CreateEntity(0, MeshID(0), MaterialID(0), -200, 0, 0);Fällt nicht runter, weil ihm kein PhysicBody zugewiesen wurde
    CreateEntity(1, MeshID(0), MaterialID(0), -150, 0, 0);Fällt runter wie er sollte
    CreateEntity(2, MeshID(0), MaterialID(0), -100, 0, 0);Fällt runter wie er sollte
    CreateEntity(3, MeshID(0), MaterialID(0),  -50, 0, 0);Sollte runterfallen, tut er aber nicht
    CreateEntity(4, MeshID(0), MaterialID(0),   50, 0, 0);Fällt nicht runter, weil ihm kein PhysicBody zugewiesen wurde
    CreateEntity(5, MeshID(0), MaterialID(0),  100, 0, 0);Fällt runter wie er sollte
    CreateEntity(6, MeshID(0), MaterialID(0),  150, 0, 0);Fällt runter wie er sollte
    CreateEntity(7, MeshID(0), MaterialID(0),  200, 0, 0);Sollte runterfallen, tut er aber nicht
    AnimateEntity(4, "Walk")
    AnimateEntity(5, "Walk")
    AnimateEntity(6, "Walk")
    AnimateEntity(7, "Walk")
    
    EnableWorldPhysics(1)
    ;WorldGravity(-9.806)
    
    EntityPhysicBody(0, #PB_Entity_None)
    EntityPhysicBody(1, #PB_Entity_BoxBody)
    EntityPhysicBody(2, #PB_Entity_SphereBody)
    EntityPhysicBody(3, #PB_Entity_StaticBody)
    EntityPhysicBody(4, #PB_Entity_None)
    EntityPhysicBody(5, #PB_Entity_BoxBody)
    EntityPhysicBody(6, #PB_Entity_SphereBody)
    EntityPhysicBody(7, #PB_Entity_StaticBody)

    SetEntityMass(0,80)
    SetEntityMass(1,80)
    SetEntityMass(2,80)
    SetEntityMass(3,80)
    SetEntityMass(4,80)
    SetEntityMass(5,80)
    SetEntityMass(6,80)
    SetEntityMass(7,80)

    SetEntityFriction(0,10)
    SetEntityFriction(1,10)
    SetEntityFriction(2,10)
    SetEntityFriction(3,10)
    SetEntityFriction(4,10)
    SetEntityFriction(5,10)
    SetEntityFriction(6,10)
    SetEntityFriction(7,10)

    EnableWorldCollisions(1)
    
    SkyBox("desert07.jpg")
    CreateCamera(0, 0, 0, 100, 100)
    CameraLocate(0,0,0,500)
    CameraLookAt(0,0,0,0)
    
    Repeat
      Screen3DEvents()
      ClearScreen(RGB(0, 0, 0))
      If ExamineKeyboard()
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -1
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = 1
        Else
          KeyX = 0
        EndIf
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -1
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = 1
        Else
          KeyY = 0
        EndIf
      EndIf
      If ExamineMouse()
        MouseX = -MouseDeltaX()/10 
        MouseY = -MouseDeltaY()/10
      EndIf
      RotateEntity(1, 1, 0, 0)
      RotateEntity(2, 1, 0, 0)
      RotateCamera(0, MouseX, MouseY, RollZ)
      MoveCamera  (0, KeyX, 0, KeyY)
      RenderWorld()
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
Zuletzt geändert von hardfalcon am 16.05.2006 18:29, insgesamt 1-mal geändert.
Nik
Beiträge: 132
Registriert: 04.02.2005 19:57

Beitrag von Nik »

Du weißt schon was das wort static bedeutet oder?
Find ich irgendwie logisch das es dann net runterfällt.
www.KoMaNi.de
Eine kleine Gruppe von Hobby Programmierern, die gerade einen Instant Messenger natürlich in PureBasic schreiben.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Du weisst schon, was zu #PB_Entity_StaticBody in der Hilfe steht, oder? :wink:
#PB_Entity_None : Kein Körper ("body") ist mit dem Entity verknüpft (Standard)
#PB_Entity_StaticBody : Der Körper ist nur statisch, was bedeutet, dass das Mesh nicht animiert werden kann.
Dieser Modus erlaubt sehr präzise Kollisionen, da diese gegen Dreiecke
ausgeführt werden (auch bekannt als "Tri-Mesh Collision"). Er ist auch
schnell bei Zusammenstößen mit den Entity-Körpertypen Kasten ("Box") und
Kugel ("Sphere"). Er ist perfekt, wenn das Mesh für die Erde oder eine
statische Welt verwendet wird.
#PB_Entity_BoxBody : Eine 'virtuelle' Box wird rings um das Entity gelegt (mit den gleichen Abmessungen)
und wird für das Managen von Kollisionen mit anderen 'Entities' verwendet.
#PB_Entity_SphereBody : Eine 'virtuelle' Kugel wird rings um das Entity gelegt und wird für das Managen
von Kollisionen mit anderen 'Entities' verwendet.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

könnte mir aber vorstellen, dass das beabsichtigt ist und nur die help ungenau...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Was sagen denn Fr34k/André dazu?
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Kaeru Gaman hat geschrieben:könnte mir aber vorstellen, dass das beabsichtigt ist und nur die help ungenau...
Ja, denn unter "Animieren" versteht man mehreres:

1.) jmd. zu etwas animieren.
3.) Ein Objekt zu interpolieren mit den einzelnen Animations-Sequenzen.
2.) Ein Objekt bewegen.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Das war mir neu... :o
Ich dachte immer, dass "animiert" bei den Meses bei PB sich auf die Animation mittels der Skeletons-Dateien beziehen würde... Jetzt wird mir einges klar... <)
Gesperrt