PhysicsBodyVelocity body,x#,y#,z#
Parameters
|
body - physics-body handle returned by CreatePhysicsBody x# - new velocity along the world X axis, in metres per second y# - new velocity along the world Y axis z# - new velocity along the world Z axis |
Description
|
Sets a body's linear velocity directly. This overwrites whatever motion the body had, no questions asked - ideal for launching projectiles at an exact speed, snappy jumps that ignore the previous fall, or conveyor-style resets. Setting a non-zero velocity wakes a sleeping body; static bodies ignore it. Because it replaces the current velocity, it can look teleport-abrupt when used every frame. When you want pushes that respect mass and add up with gravity and collisions, use PhysicsBodyImpulse for one-off kicks or PhysicsBodyForce for sustained thrust. Read the current velocity back with PhysicsBodyVelocityX, PhysicsBodyVelocityY and PhysicsBodyVelocityZ. Requires Extended mode. See also: PhysicsBodyVelocityX, PhysicsBodyVelocityY, PhysicsBodyVelocityZ, PhysicsBodyAngularVelocity, PhysicsBodyImpulse, PhysicsBodyForce. |
Example
; PhysicsBodyVelocity Example ; --------------------------- ; Requires Extended mode. Graphics3D 640,480,0,2 SetBuffer BackBuffer() Const PHYSICS_STATIC=0 Const PHYSICS_DYNAMIC=2 SeedRnd MilliSecs() camera=CreateCamera() PositionEntity camera,0,4,-12 light=CreateLight() RotateEntity light,45,-30,0 AmbientLight 50,50,50 ; Independent Box3D world with Earth-like gravity world=CreatePhysicsWorld() PhysicsGravity world,0,-9.81,0 ; Blue arena floor ground=CreateCube() ScaleEntity ground,5,0.5,5 PositionEntity ground,0,-0.5,0,True EntityColor ground,80,160,255 ground_body=CreatePhysicsBody(world,ground,PHYSICS_STATIC) ground_shape=PhysicsBodyBox(ground_body,10,1,10,0) ; Four blue walls keep the ball inside the arena For i=0 To 3 wall=CreateCube() ScaleEntity wall,0.25,1.5,5 RotateEntity wall,0,i*90,0 PositionEntity wall,Cos(i*90)*5,1.5,Sin(i*90)*5,True EntityColor wall,80,160,255 wall_body=CreatePhysicsBody(world,wall,PHYSICS_STATIC) wall_shape=PhysicsBodyBox(wall_body,0.5,3,10,0) Next ; Lively orange ball bouncing around the arena ball=CreateSphere() ScaleEntity ball,0.5,0.5,0.5 PositionEntity ball,0,2,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.8 ; Set the ball's starting velocity in metres per second PhysicsBodyVelocity ball_body,3,5,2 While Not KeyDown(1) ; Space overwrites the velocity with a new random kick If KeyHit(57) Then PhysicsBodyVelocity ball_body,Rnd(-3,3),Rnd(3,6),Rnd(-3,3) ; Advance the Box3D simulation by one 60 Hz step StepPhysics world,1.0/60.0,4 ; Read back the live velocity components vel_x#=PhysicsBodyVelocityX(ball_body) vel_y#=PhysicsBodyVelocityY(ball_body) vel_z#=PhysicsBodyVelocityZ(ball_body) ; 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: kick the ball Esc: exit" Text 0,20,"Velocity X: "+vel_x Text 0,40,"Velocity Y: "+vel_y Text 0,60,"Velocity Z: "+vel_z Flip Wend FreePhysicsWorld world FreeEntity ball FreeEntity ground End
Index