Difference between revisions of "B2.World:rayCast"
(Created page with "__NOTOC__ '''Available since:''' Gideros 2011.6<br/> === Description === <br /> Ray-cast the world for all fixtures in the path of the ray. Your callback controls whether you...") |
|||
| (11 intermediate revisions by 3 users not shown) | |||
| Line 1: | Line 1: | ||
__NOTOC__ | __NOTOC__ | ||
'''Available since:''' Gideros 2011.6<br/> | '''Available since:''' Gideros 2011.6<br/> | ||
| + | '''Class:''' [[b2.World]]<br/> | ||
| + | |||
=== Description === | === 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. | |
| − | Ray- | + | <syntaxhighlight lang="lua"> |
| − | < | + | b2.World:rayCast(x1,y1,x2,y2,listener,data) |
| − | Listener function is called for each fixture found in the query and accepts 6 parameters (7 if data parameter is provided): | + | </syntaxhighlight> |
| − | + | ||
| − | + | Listener function is called for each fixture found in the query and accepts 6 parameters (7 if data parameter is provided): | |
| − | + | #the fixture hit by the ray | |
| − | + | #the x coordinate of the point of initial intersection | |
| − | + | #the y coordinate of the point of initial intersection | |
| − | + | #the x coordinate of the normal vector at the point of intersection | |
| − | + | #the y coordinate of the normal vector at the point of intersection | |
| − | + | #fraction | |
| − | You control how the ray cast proceeds by returning a number: | + | |
| − | + | 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 | |
| − | + | ||
| − | + | === Parameters === | |
| − | + | '''x1''': (number) the x coordinate of the ray starting point <br/> | |
| − | + | '''y1''': (number) the y coordinate of the ray starting point <br/> | |
| − | + | '''x2''': (number) the x coordinate of the ray ending point <br/> | |
| − | = | + | '''y2''': (number) the y coordinate of the ray ending point <br/> |
| − | + | '''listener''': (function) the listener function that processes the results <br/> | |
| − | '''x1 | + | '''data''': (any) an optional data parameter that is passed as a first argument to the listener function '''optional'''<br/> |
| − | '''y1 | + | |
| − | '''x2 | + | === Example === |
| − | '''y2 | + | '''Detecting bodies with raycasting''' |
| − | '''listener | + | <syntaxhighlight lang="lua"> |
| − | '''data | + | 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) | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | {{B2.World}} | ||
Latest revision as of 21:36, 30 April 2025
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.
b2.World:rayCast(x1,y1,x2,y2,listener,data)
Listener function is called for each fixture found in the query and accepts 6 parameters (7 if data parameter is provided):
- the fixture hit by the ray
- the x coordinate of the point of initial intersection
- the y coordinate of the point of initial intersection
- the x coordinate of the normal vector at the point of intersection
- the y coordinate of the normal vector at the point of intersection
- 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
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
Example
Detecting bodies with raycasting
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)