Difference between revisions of "B2.World:rayCast"

From GiderosMobile
m (2 typos in the code example)
m (Text replacement - "<source" to "<syntaxhighlight")
Line 20: Line 20:
 
*return fraction: clip the ray to this point
 
*return fraction: clip the ray to this point
 
*return 1: don't clip the ray and continue
 
*return 1: don't clip the ray and continue
<source lang="lua">
+
<syntaxhighlight lang="lua">
 
b2.World:rayCast(x1,y1,x2,y2,listener,data)
 
b2.World:rayCast(x1,y1,x2,y2,listener,data)
 
</source>
 
</source>
Line 34: Line 34:
 
=== <translate>Examples</translate> ===
 
=== <translate>Examples</translate> ===
 
'''Detecting bodies with raycasting'''
 
'''Detecting bodies with raycasting'''
<source lang="lua">
+
<syntaxhighlight lang="lua">
 
local raycastCallback function(fixture, hitX, hitY, vectX, vectY, fraction)
 
local raycastCallback function(fixture, hitX, hitY, vectX, vectY, fraction)
 
     --so if this function is called, it means we hit some kind of object
 
     --so if this function is called, it means we hit some kind of object

Revision as of 14:26, 13 July 2023


Available since: Gideros 2011.6
Class: b2.World

Description

Ray-casts the world for all fixtures in the path of the ray. Your callback controls whether you get the closest point, any point, or n-points. The ray-cast ignores shapes that contain the starting point.

Listener function is called for each fixture found in the query and accepts 6 parameters (7 if data parameter is provided):

  1. the fixture hit by the ray
  2. the x coordinate of the point of initial intersection
  3. the y coordinate of the point of initial intersection
  4. the x coordinate of the normal vector at the point of intersection
  5. the y coordinate of the normal vector at the point of intersection
  6. fraction

You control how the ray cast proceeds by returning a number:

  • return no value or -1: ignore this fixture and continue
  • return 0: terminate the ray cast
  • return fraction: clip the ray to this point
  • return 1: don't clip the ray and continue

<syntaxhighlight lang="lua"> b2.World:rayCast(x1,y1,x2,y2,listener,data) </source>

Parameters

x1: (number) the x coordinate of the ray starting point
y1: (number) the y coordinate of the ray starting point
x2: (number) the x coordinate of the ray ending point
y2: (number) the y coordinate of the ray ending point
listener: (function) the listener function that processes the results
data: (any) an optional data parameter that is passed as a first argument to the listener function optional

Examples

Detecting bodies with raycasting <syntaxhighlight lang="lua"> local raycastCallback function(fixture, hitX, hitY, vectX, vectY, fraction)

   --so if this function is called, it means we hit some kind of object
   --and its fixture is stored in first variable we named "fixture"
   --so we can for example get body
   local body = fixture:getBody()

end

--now we add callback function for projected raycast above body --Parameters: --object x coordinate --object y coordinate --projection vector on x axis --projection vector on y axis --callback function local x, y = body:getPosition() world:rayCast(x, y, x, y-100, raycastCallback) </source>





LiquidFun