CountPhysicsQueryHits ( query )
Parameters
| query - query handle |
Description
|
Returns the number of copied hits from the last successful run, initially zero. Hit accessors use one-based indices 1 through this count. Closest-point results have one entry (zero for an empty body); shape-distance results have two entries in caller-supplied A/B order. Sensor occupancy results count visitors. Character results count starting-pose planes and may have multiple entries for one shape; these are not the contacts of the later movement cast. Current-contact captures use CountPhysicsQueryManifolds instead and have zero generic hits. Another query does not replace this batch. Results are copied. They survive StepPhysics and other queries until this query runs successfully again or is freed. Failed runs preserve the previous results. Freeing the owning world frees its queries. Invalid/stale/wrong-kind handles and invalid hit indices raise runtime errors. Requires Extended mode. See also: CreatePhysicsQuery, PhysicsQueryFilter, PhysicsQueryTarget, QueryPhysicsRay, QueryPhysicsSphere, PhysicsQueryLimit. |
Example
; CountPhysicsQueryHits Example ; ----------------------------- ; Requires Extended mode. Graphics3D 640,480,0,2 SetBuffer BackBuffer() Const PHYSICS_STATIC=0 Const PHYSICS_DYNAMIC=2 camera=CreateCamera() PositionEntity camera,0,7,-8 RotateEntity camera,40,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 ring of crates to aim at For i=1 To 8 crate=CreateCube() ScaleEntity crate,0.5,0.5,0.5 PositionEntity crate,Cos(i*45)*4,0.5,Sin(i*45)*4 EntityColor crate,255,120,70 crate_body=CreatePhysicsBody(world,crate,PHYSICS_STATIC) crate_shape=PhysicsBodyBox(crate_body,1,1,1) Next ; A query object runs searches and keeps a copy of their results query=CreatePhysicsQuery(world) ; Start aimed at a crate angle#=45 While Not KeyDown(1) ; A and D sweep the ray around the centre If KeyDown(30) Then angle=angle+1.5 If KeyDown(32) Then angle=angle-1.5 dx#=Cos(angle)*6 dz#=Sin(angle)*6 StepPhysics world,1.0/60.0,4 ; Cast right across the ring; True keeps a hit for every shape the ray passes through hits=QueryPhysicsRay(query,-dx,0.5,-dz,dx*2,0,dz*2,True) ; 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 ; Draw the ray from the centre to the first hit, or to its full length CameraProject camera,0,0.5,0 start_x=ProjectedX() start_y=ProjectedY() If hits>0 CameraProject camera,PhysicsQueryX(query,1),PhysicsQueryY(query,1),PhysicsQueryZ(query,1) Else CameraProject camera,dx,0.5,dz EndIf Line start_x,start_y,ProjectedX(),ProjectedY() Text 0,0,"Arrow keys: move camera A / D: sweep the ray Esc: exit" Text 0,20,"CountPhysicsQueryHits(query) = "+CountPhysicsQueryHits(query) Text 0,40,"A ray through the middle crosses the ring twice" Flip Wend FreePhysicsWorld world End
Index