PhysicsGravityX# ( world )
Parameters
| world - live explicit physics world |
Description
|
Returns the X component of this world's gravity vector in world axes, in m/s², as a Float. The default vector is (0,-10,0), so this component defaults to 0. This is the world acceleration setting, not a body's resulting acceleration; body gravity scale, mode, locks, contacts and other forces can change body motion. PhysicsGravity sets the complete vector. Reading it does not change simulation state. Ordinary world/body arguments must be live handles of the correct kind; invalid or stale handles raise a runtime error. Mutations are rejected while the owning world is stepping. Requires Extended mode. See also: PhysicsGravity, PhysicsBodyGravityScale. |
Example
; PhysicsGravityX Example ; ----------------------- ; Requires Extended mode. Graphics3D 640,480,0,2 SetBuffer BackBuffer() Const PHYSICS_STATIC=0 Const PHYSICS_DYNAMIC=2 Const CRATE_COUNT=12 SeedRnd MilliSecs() camera=CreateCamera() PositionEntity camera,0,6,-12 RotateEntity camera,20,0,0 light=CreateLight() RotateEntity light,45,-30,0 AmbientLight 60,60,60 ; An independent Box3D world with standard gravity world=CreatePhysicsWorld() ; Blue static floor ground=CreateCube() ScaleEntity ground,6,0.5,6 PositionEntity ground,0,-0.5,0 EntityColor ground,80,160,255 ground_body=CreatePhysicsBody(world,ground,PHYSICS_STATIC) ground_shape=PhysicsBodyBox(ground_body,12,1,12) ; A pile of crates, dropped from random heights Dim crates(CRATE_COUNT) Dim crate_bodies(CRATE_COUNT) For i=1 To CRATE_COUNT crates(i)=CreateCube() ScaleEntity crates(i),0.5,0.5,0.5 crate_bodies(i)=CreatePhysicsBody(world,crates(i),PHYSICS_DYNAMIC) crate_shape=PhysicsBodyBox(crate_bodies(i),1,1,1) Next DropPile() tilt#=0 While Not KeyDown(1) ; R drops the pile again If KeyHit(19) Then DropPile() ; [ and ] tilt gravity sideways, waking the crates so they respond If KeyDown(26) Then tilt=tilt-0.1 If KeyDown(27) Then tilt=tilt+0.1 If KeyDown(26) Or KeyDown(27) PhysicsGravity world,tilt,-10,0 For i=1 To CRATE_COUNT PhysicsBodyAwake crate_bodies(i),True Next EndIf StepPhysics world,1.0/60.0,4 ; Orange crates are awake, grey crates are asleep For i=1 To CRATE_COUNT If PhysicsBodyIsAwake(crate_bodies(i)) EntityColor crates(i),255,120,70 Else EntityColor crates(i),150,150,150 EndIf Next ; 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 R: drop again [ / ]: tilt gravity Esc: exit" Text 0,20,"PhysicsGravityX(world) = "+PhysicsGravityX(world)+" m/s/s" Text 0,40,"(gravity is X "+PhysicsGravityX(world)+", Y "+PhysicsGravityY(world)+", Z "+PhysicsGravityZ(world)+" m/s/s)" Flip Wend FreePhysicsWorld world End Function DropPile() For i=1 To CRATE_COUNT ResetPhysicsBody crate_bodies(i),Rnd(-1.5,1.5),2+i*0.8,Rnd(-1.5,1.5),0,Rnd(Pi),0 Next End Function
Index