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ßßß


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