Seite 1 von 1

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

Verfasst: 14.05.2006 17:47
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

Verfasst: 14.05.2006 17:52
von Nik
Du weißt schon was das wort static bedeutet oder?
Find ich irgendwie logisch das es dann net runterfällt.

Verfasst: 14.05.2006 17:53
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.

Verfasst: 15.05.2006 09:50
von Kaeru Gaman
könnte mir aber vorstellen, dass das beabsichtigt ist und nur die help ungenau...

Verfasst: 16.05.2006 16:32
von hardfalcon
Was sagen denn Fr34k/André dazu?

Verfasst: 16.05.2006 16:37
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.

Verfasst: 16.05.2006 18:28
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... <)