Difference between revisions of "B2.World:rayCast"

From GiderosMobile
m (Text replacement - "</source>" to "</syntaxhighlight>")
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
 +
<languages />
 
'''<translate>Available since</translate>:''' Gideros 2011.6<br/>
 
'''<translate>Available since</translate>:''' Gideros 2011.6<br/>
 +
'''<translate>Class</translate>:''' [[Special:MyLanguage/b2.World|b2.World]]<br/>
 +
 
=== <translate>Description</translate> ===
 
=== <translate>Description</translate> ===
<translate><br />
+
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-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. <br />
+
 
<br />
+
Listener function is called for each fixture found in the query and accepts 6 parameters (7 if data parameter is provided):
Listener function is called for each fixture found in the query and accepts 6 parameters (7 if data parameter is provided):<br />
+
#the fixture hit by the ray
<br />
+
#the x coordinate of the point of initial intersection
1. the fixture hit by the ray<br />
+
#the y coordinate of the point of initial intersection
2. the x coordinate of the point of initial intersection <br />
+
#the x coordinate of the normal vector at the point of intersection
3. the y coordinate of the point of initial intersection<br />
+
#the y coordinate of the normal vector at the point of intersection
4. the x coordinate of the normal vector at the point of intersection <br />
+
#fraction
5. the y coordinate of the normal vector at the point of intersection <br />
+
 
6. fraction<br />
+
You control how the ray cast proceeds by returning a number:
<br />
+
*return no value or -1: ignore this fixture and continue
You control how the ray cast proceeds by returning a number:<br />
+
*return 0: terminate the ray cast
<br />
+
*return fraction: clip the ray to this point
&lt;ul&gt;<br />
+
*return 1: don't clip the ray and continue
&lt;li&gt;return no value or -1: ignore this fixture and continue&lt;/li&gt;<br />
+
<syntaxhighlight lang="lua">
&lt;li&gt;return 0: terminate the ray cast&lt;/li&gt;<br />
+
b2.World:rayCast(x1,y1,x2,y2,listener,data)
&lt;li&gt;return fraction: clip the ray to this point&lt;/li&gt;<br />
+
</syntaxhighlight>
&lt;li&gt;return 1: don&#039;t clip the ray and continue&lt;/li&gt;<br />
+
 
&lt;/ul&gt;<br />
 
<br />
 
<br /></translate>
 
<source lang="lua">
 
b2.World:rayCast(x1,y1,x2,y2,listener,data)
 
</source>
 
 
=== <translate>Parameters</translate> ===
 
=== <translate>Parameters</translate> ===
 
'''x1''': (number) <translate>the x coordinate of the ray starting point</translate> <br/>
 
'''x1''': (number) <translate>the x coordinate of the ray starting point</translate> <br/>
Line 34: Line 31:
 
'''listener''': (function) <translate>the listener function that processes the results</translate> <br/>
 
'''listener''': (function) <translate>the listener function that processes the results</translate> <br/>
 
'''data''': (any) <translate>an optional data parameter that is passed as a first argument to the listener function</translate> '''optional'''<br/>
 
'''data''': (any) <translate>an optional data parameter that is passed as a first argument to the listener function</translate> '''optional'''<br/>
 +
 
=== <translate>Examples</translate> ===
 
=== <translate>Examples</translate> ===
'''Detecting bodies with raycasting'''<br/>
+
'''Detecting bodies with raycasting'''
<source lang="lua">local raycastCallback function(fixture, hitX, hitY, vectX, vectY, fration)
+
<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
 
     --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"
+
     --and its fixture is stored in first variable we named "fixture"
 
     --so we can for example get body
 
     --so we can for example get body
 
     local body = fixture:getBody()
 
     local body = fixture:getBody()
 
 
end
 
end
 
   
 
   
Line 52: Line 50:
 
--callback function
 
--callback function
 
local x, y = body:getPosition()
 
local x, y = body:getPosition()
world:rayCast(x, y, x, y-100, raycastCallback)</source>
+
world:rayCast(x, y, x, y-100, raycastCallback)
 +
</syntaxhighlight>
 +
 
 +
{{B2.World}}

Latest revision as of 14:27, 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
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, 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)





LiquidFun