Collisions BUG mit Cubes

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
grapy
Beiträge: 108
Registriert: 09.09.2004 09:05

Collisions BUG mit Cubes

Beitrag von grapy »

Hallo,
super, das es in PB4 Physik und Kollisionen gibt.
hab ein wenig damit gespielt und endeckt,
wenn EnableWorldCollisions(1) eingeschaltet,
die Würfel ineinander fallen (siehe Code).
(ist inzwischen auch im engl. Forum gepostet)

gruuußßß :mrgreen: grapy :allright:

Code: Alles auswählen

If InitEngine3D()

  InitSprite()
  InitKeyboard()
  InitMouse()  

  If OpenScreen(800, 600, 32, "3DCollisionsBUG")
  
    EnableWorldPhysics(1)
    EnableWorldCollisions(1) ; Cube Collisins are buggy if enabled
  
    AmbientColor(RGB(128, 128, 128))

    CreateMesh(1, 100) 
    SetMeshData(1, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color, ?CubeData2, 8)
    SetMeshData(1, #PB_Mesh_Face, ?CubeDataIndex, 12)
  
    CreateEntity(1, MeshID(1), 0, 0, 0, 0)    
    EntityPhysicBody(1, #PB_Entity_StaticBody)

    For z = 2 To 9
      CopyEntity(1, z)
      EntityPhysicBody(z, #PB_Entity_BoxBody)
      ScaleEntity(z, 0.2, 0.2, 0.2)
      SetEntityMass(z, 5)
      EntityLocate(z, 0, z*75+100, 0)
    Next

    CreateLight(1, RGB(255,255,255), 0, 500, 500)
    
    CreateCamera(1, 0, 0, 100, 100)
    CameraLocate(1, 0, 250, 500)

    Repeat

      If ExamineKeyboard()
        If KeyboardPushed(#PB_Key_A)
          KeyX.f = -1
        ElseIf KeyboardPushed(#PB_Key_D)
          KeyX = 1
        Else
          KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_W)
          KeyZ.f = -1
        ElseIf KeyboardPushed(#PB_Key_S)
          KeyZ = 1
        Else
          KeyZ = 0
        EndIf
      EndIf

      If ExamineMouse()
        MouseX.f = -MouseDeltaX()/10 
        MouseY.f = -MouseDeltaY()/10
      EndIf
      
      RotateCamera(1, MouseX, MouseY, 0)
      MoveCamera(1, KeyX, 0, KeyZ)

      RenderWorld()
      
      If StartDrawing(ScreenOutput())
        FrontColor(RGB(255, 255, 255))
        DrawingMode(#PB_2DDrawing_Transparent)
        DrawText(0, 0, StrF(Engine3DFrameRate(#PB_Engine3D_Current), 1)+" FPS")
        DrawText(0, 20, Str(CountRenderedTriangles())+" Triangles")
        StopDrawing()
      EndIf
      
      FlipBuffers()
      
      ClearScreen(RGB(0, 0, 0))

    Until KeyboardPushed(#PB_Key_Escape)

  EndIf
  
EndIf  

#SQRT13 = 0.57735026

DataSection

  CubeData2:
   
    Data.f -100.0,100.0,-100.0;        //0 position
    Data.f -#SQRT13,#SQRT13,-#SQRT13;     //0 normal
    Data.l  $F87FF                 ;,                //0 colour
    Data.f 100.0,100.0,-100.0;         //1 position
    Data.f #SQRT13,#SQRT13,-#SQRT13;      //1 normal
    Data.l  $34F67F  ;,                //1 colour
    Data.f 100.0,-100.0,-100.0;,        //2 position
    Data.f #SQRT13,-#SQRT13,-#SQRT13;,     //2 normal
    Data.l  $FF00FF  ;,                //2 colour
    Data.f -100.0,-100.0,-100.0;,       //3 position
    Data.f -#SQRT13,-#SQRT13,-#SQRT13;,    //3 normal
    Data.l  $FF00FF  ;,                //3 colour
    Data.f -100.0,100.0,100.0;,         //4 position
    Data.f -#SQRT13,#SQRT13,#SQRT13;,      //4 normal
    Data.l  $FFF3F  ;,                //4 colour
    Data.f 100.0,100.0,100.0;,          //5 position
    Data.f #SQRT13,#SQRT13,#SQRT13;,       //5 normal
    Data.l  $FFFF  ;,                //5 colour
    Data.f 100.0,-100.0,100.0;,         //6 position
    Data.f #SQRT13,-#SQRT13,#SQRT13;,      //6 normal
    Data.l  $FFF3F  ;,                //6 colour
    Data.f -100.0,-100.0,100.0;,        //7 position
    Data.f -#SQRT13,-#SQRT13,#SQRT13;,     //7 normal
    Data.l  $FF12FF  ;                 //7 colour

  CubeDataIndex:
    Data.w 0,2,3
    Data.w 0,1,2
    Data.w 1,6,2
    Data.w 1,5,6
    Data.w 4,6,5
    Data.w 4,7,6
    Data.w 0,7,4
    Data.w 0,3,7
    Data.w 0,5,1
    Data.w 0,4,5
    Data.w 2,7,3
    Data.w 2,6,7
     
EndDataSection