Difference between revisions of "World:setCallbacks"
Flamingarrow (talk | contribs) m (BOX2D -> Box2d) |
(Contacts may be destroyed: https://love2d.org/forums/viewtopic.php?f=4&t=91575&p=241914) |
||
Line 4: | Line 4: | ||
When called, each function will be passed three arguments. The first two arguments are the colliding fixtures and the third argument is the [[Contact]] between them. The postSolve callback additionally gets the normal and tangent impulse for each contact point. See notes. | When called, each function will be passed three arguments. The first two arguments are the colliding fixtures and the third argument is the [[Contact]] between them. The postSolve callback additionally gets the normal and tangent impulse for each contact point. See notes. | ||
+ | |||
+ | The [[Contact]]s may be destroyed immediately after the callback is called, so if you want to store their data for use later in [[love.update]], you must cache it. | ||
If you are interested to know when exactly each callback is called, consult a Box2d [http://www.iforce2d.net/b2dtut/collision-anatomy manual] | If you are interested to know when exactly each callback is called, consult a Box2d [http://www.iforce2d.net/b2dtut/collision-anatomy manual] | ||
Line 48: | Line 50: | ||
== See Also == | == See Also == | ||
* [[parent::World]] | * [[parent::World]] | ||
+ | * [[parent::Contact]] | ||
* [[Tutorial:PhysicsCollisionCallbacks]] | * [[Tutorial:PhysicsCollisionCallbacks]] | ||
[[Category:Functions]] | [[Category:Functions]] |
Revision as of 15:46, 1 July 2021
Sets functions for the collision callbacks during the world update.
Four Lua functions can be given as arguments. The value nil removes a function.
When called, each function will be passed three arguments. The first two arguments are the colliding fixtures and the third argument is the Contact between them. The postSolve callback additionally gets the normal and tangent impulse for each contact point. See notes.
The Contacts may be destroyed immediately after the callback is called, so if you want to store their data for use later in love.update, you must cache it.
If you are interested to know when exactly each callback is called, consult a Box2d manual
Making changes to a World is not allowed inside of the beginContact, endContact, preSolve, and postSolve callback functions, as Box2D locks the world during these callbacks. |
Contents
Function
Available since LÖVE 0.8.0 |
This method is not supported in earlier versions. |
Synopsis
World:setCallbacks( beginContact, endContact, preSolve, postSolve )
Arguments
function beginContact
- Gets called when two fixtures begin to overlap.
function endContact
- Gets called when two fixtures cease to overlap. This will also be called outside of a world update, when colliding objects are destroyed.
function preSolve
- Gets called before a collision gets resolved.
function postSolve
- Gets called after the collision has been resolved.
Returns
Nothing.
Function
Removed in LÖVE 0.8.0 |
This variant is not supported in that and later versions. |
Synopsis
World:setCallbacks( add, persist, remove, result )
Arguments
function add
- Called when two shapes first collide.
function persist
- Called each frame, if collision lasts more than 1 frame.
function remove
- Called when two shapes finish colliding.
function result
- Called after a collision has been calculated. Note: This callback is not properly bound in LOVE at the time of writing, as a result, this callback does not get called, nor do proper arguments get passed for it.
Returns
Nothing.
Notes
Below are the parameters for the postSolve callback. Note that the numbers of normal and tangent impulse correspond with the numbers of contact points.
function postSolve(fixture1, fixture2, contact, normal_impulse1, tangent_impulse1, normal_impulse2, tangent_impulse2)
-- do stuff
end
See Also
Other Languages
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info