PhysicsJointFrameX# ( joint,side )
Parameters
|
joint - a current physics joint handle side - 1 for body A; 2 for body B |
Description
|
Returns the x component of the selected body's local attachment frame. Side 1 selects body A; side 2 selects body B. Positions use metres in unscaled body-local coordinates. Rotations use Blitz pitch/yaw/roll in radians; equivalent orientations can have different Euler representations near angle wrapping or gimbal lock. This is not the current world-space body pose. Invalid, stale or wrong-kind handles raise a runtime error. Requires Extended mode. See also: PhysicsJointSpring, PhysicsJointFrame, PhysicsJointThresholds, PhysicsJointEventJoint, StepPhysics. |
Example
; PhysicsJointFrameX 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,-7 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 static post, and a door hinged to it on a vertical axis post=CreateCube() ScaleEntity post,0.1,1.5,0.1 PositionEntity post,-1.5,1.5,0 EntityColor post,150,150,160 post_body=CreatePhysicsBody(world,post,PHYSICS_STATIC) post_shape=PhysicsBodyBox(post_body,0.2,3,0.2) door=CreateCube() ScaleEntity door,1.2,1.4,0.05 PositionEntity door,-0.2,1.5,0 EntityColor door,255,120,70 door_body=CreatePhysicsBody(world,door,PHYSICS_DYNAMIC) door_shape=PhysicsBodyBox(door_body,2.4,2.8,0.1) PhysicsBodyDamping door_body,0,1 hinge=CreatePhysicsHingeJoint(post_body,door_body,-1.4,1.5,0,0,1,0) While Not KeyDown(1) ; Space pushes the far edge of the door If KeyHit(57) TFormPoint 1,0,0,door,0 PhysicsBodyImpulseAt door_body,0,0,2,TFormedX(),TFormedY(),TFormedZ() EndIf ; F moves the door's attachment point between its edge and its middle If KeyHit(33) middle=Not middle local_x#=-1.2 If middle Then local_x=0 PhysicsJointFrame hinge,2,local_x,PhysicsJointFrameY(hinge,2),PhysicsJointFrameZ(hinge,2),PhysicsJointFramePitch(hinge,2),PhysicsJointFrameYaw(hinge,2),PhysicsJointFrameRoll(hinge,2) EndIf 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: push F: move the hinge point Esc: exit" Text 0,20,"PhysicsJointFrameX(hinge,1) = "+PhysicsJointFrameX(hinge,1)+" (hinge,2) = "+PhysicsJointFrameX(hinge,2) Text 0,40,"Side 2 is the door: its frame is at local X "+PhysicsJointFrameX(hinge,2) Flip Wend FreePhysicsWorld world End
Index