Difference between revisions of "B2.World:rayCast"

From GiderosMobile
Line 27: Line 27:
 
  b2.World:rayCast(x1,y1,x2,y2,listener,data)
 
  b2.World:rayCast(x1,y1,x2,y2,listener,data)
 
</source>
 
</source>
'''x1''': (number) the x coordinate of the ray starting point ''''''<br/>
+
=== Parameters ===
'''y1''': (number) the y coordinate of the ray starting point ''''''<br/>
+
'''x1''': (number) the x coordinate of the ray starting point <br/>
'''x2''': (number) the x coordinate of the ray ending point ''''''<br/>
+
'''y1''': (number) the y coordinate of the ray starting point <br/>
'''y2''': (number) the y coordinate of the ray ending point ''''''<br/>
+
'''x2''': (number) the x coordinate of the ray ending point <br/>
'''listener''': (function) the listener function that processes the results ''''''<br/>
+
'''y2''': (number) the y coordinate of the ray ending point <br/>
 +
'''listener''': (function) the listener function that processes the results <br/>
 
'''data''': (any) an optional data parameter that is passed as a first argument to the listener function '''optional'''<br/>
 
'''data''': (any) an optional data parameter that is passed as a first argument to the listener function '''optional'''<br/>
 +
=== Examples ===
 +
'''Detecting bodies with raycasting'''<br/>
 +
<source lang="lua">local raycastCallback function(fixture, hitX, hitY, vectX, vectY, fration)
 +
    --so if this function is called, it means we hit some kind of object
 +
    --and it's 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>

Revision as of 11:45, 23 August 2018

Available since: Gideros 2011.6

Description


Ray-cast 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:

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


 b2.World:rayCast(x1,y1,x2,y2,listener,data)

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

local raycastCallback function(fixture, hitX, hitY, vectX, vectY, fration)
    --so if this function is called, it means we hit some kind of object
    --and it's 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)