Blitz3D+ Command Reference

PhysicsJointForceY# ( joint )

Parameters

joint - a current physics joint handle

Description

Returns the Y component of a joint's constraint force.

Returns the Y component of the native solved constraint force in newtons, in world axes, acting on body B. The opposite reaction acts on body A. Positive angular quantities follow the right-hand rule. Torque includes angular constraints, springs, motors and limits where supported; the moment of anchor force (r cross force) is separate. A distance joint has no angular constraint torque.

Read after StepPhysics. This is the cached solver impulse divided by the world's most recent substep duration, not a force inferred from displacement or an average across the whole frame. Sleeping/disabled joints may retain an earlier impulse. Changes to configuration take effect on the next solve.

Invalid, stale or wrong-kind handles raise a runtime error.

Requires Extended mode.

See also: PhysicsJointSpring, PhysicsJointFrame, PhysicsJointThresholds, PhysicsJointEventJoint, StepPhysics.

Example

; PhysicsJointForceY 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

    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   Esc: exit"
    Text 0,20,"PhysicsJointForceY(hinge) = "+PhysicsJointForceY(hinge)+" N"
    Text 0,40,"The hinge carries the door's weight and stops it falling"
    Text 0,60,"(force "+PhysicsJointForceX(hinge)+", "+PhysicsJointForceY(hinge)+", "+PhysicsJointForceZ(hinge)+" N)"
    Text 0,80,"(torque "+PhysicsJointTorqueX(hinge)+", "+PhysicsJointTorqueY(hinge)+", "+PhysicsJointTorqueZ(hinge)+" N m)"

    Flip

Wend

FreePhysicsWorld world
End

Index