Blitz3D+ Command Reference

CreatePhysicsWorld ( )

Parameters

None.

Description

Creates a new physics simulation world and returns its handle.

A physics world is an independent Box3D simulation. It owns every body, shape and joint you create in it, and knows nothing about any other world. Most games create one world at startup, add a static body for the level plus dynamic bodies for the props, and then step the world once per frame.

Nothing in a physics world moves until you call StepPhysics - UpdateWorld and RenderWorld never advance it, and it is completely separate from Blitz3D's built-in Collisions system. Box3D works in metres, kilograms and seconds, so a human-sized character is about 2 units tall.

A new world starts with gravity 0,-10,0 and a single worker thread. Use PhysicsGravity to change gravity (0,-9.81,0 for Earth-like feel) and PhysicsWorkers to spread big scenes across threads. When you are done, FreePhysicsWorld destroys the world together with everything it owns.

Requires Extended mode.

See also: PhysicsGravity, StepPhysics, CreatePhysicsBody, PhysicsWorkers, FreePhysicsWorld.

Example

; CreatePhysicsWorld Example
; --------------------------
; Requires Extended mode.

Graphics3D 640,480,0,2
SetBuffer BackBuffer()

Const PHYSICS_STATIC=0
Const PHYSICS_DYNAMIC=2

camera=CreateCamera()
PositionEntity camera,0,3,-9

light=CreateLight()
RotateEntity light,45,-30,0
AmbientLight 50,50,50

; Create an independent Box3D simulation world
world=CreatePhysicsWorld()

; Give the new world Earth-like gravity
PhysicsGravity world,0,-9.81,0

; Blue static ground slab
ground=CreateCube()
ScaleEntity ground,4,0.5,4
PositionEntity ground,0,-0.5,0,True
EntityColor ground,80,160,255
ground_body=CreatePhysicsBody(world,ground,PHYSICS_STATIC)
ground_shape=PhysicsBodyBox(ground_body,8,1,8,0)

; Bouncy orange ball to show the world simulating
ball=CreateSphere()
ScaleEntity ball,0.5,0.5,0.5
PositionEntity ball,0,4,0,True
EntityColor ball,255,120,70
ball_body=CreatePhysicsBody(world,ball,PHYSICS_DYNAMIC)
ball_shape=PhysicsBodySphere(ball_body,1,1)
PhysicsShapeRestitution ball_shape,0.7

While Not KeyDown(1)

    ; Space throws the ball back up
    If KeyHit(57) Then PhysicsBodyVelocity ball_body,0,7,0

    ; Physics worlds only advance when StepPhysics is called
    StepPhysics world,1.0/60.0,4

    ; Arrow keys move the camera
    If KeyDown(200) Then MoveEntity camera,0,0,0.1
    If KeyDown(208) Then MoveEntity camera,0,0,-0.1
    If KeyDown(203) Then TurnEntity camera,0,1,0
    If KeyDown(205) Then TurnEntity camera,0,-1,0

    RenderWorld

    Text 0,0,"Arrow keys: move camera   Space: throw ball up   Esc: exit"
    Text 0,20,"World handle: "+world+"   (stepped 60 times per second)"

    Flip

Wend

FreePhysicsWorld world
FreeEntity ball
FreeEntity ground
End

Index