Precise collision information

Hello everybody

How to get collision data when bodies are moving with high speed?

display.setStatusBar( display.HiddenStatusBar ) local physics = require "physics" physics.start() physics.setDrawMode("hybrid") physics.setGravity(0,9.8) physics.setPositionIterations( 10 ) local sensorCircle, redSquare local collisionHook = 0 local floorCollisionFilter = { categoryBits=1, maskBits=4 } -- floor collides with (4 and 2) only local floor = display.newRect( 220, 500, 920, 1 ) physics.addBody( floor, "static", { bounce=0.8 , filter=floorCollisionFilter } ) floor.id = "Ziellinie" floor.rotation = -145 local redCollisionFilter = { categoryBits=2, maskBits=3 } -- red collides with (2 and 1) only local blueCollisionFilter = { categoryBits=4, maskBits=5 } -- blue collides with (4 and 1) only function throwBody() local redSquare = display.newRect( 220, 130, 40, 40 ) redSquare:setFillColor( 1, 0, 0 ) physics.addBody( redSquare,"dynamic",{ friction=0 , filter=redCollisionFilter } ) redSquare:applyForce( math.random( -10, 10 ), 165, redSquare.x, redSquare.y ) redSquare.id = "socket" local sensorCircle = display.newCircle(redSquare.x,redSquare.y,10) sensorCircle.id = "sensorCircle" physics.addBody(sensorCircle, "dynamic", {density=3, radius=1, bounce=0.3, friction=0.7 , filter = blueCollisionFilter}) local function onLocalCollision( self, event ) if ( event.phase == "began" ) and collisionHook == 0 then if collisionPoint2 then collisionPoint2:removeSelf() end collisionHook = 1 print( self.id .. ": collision began with " .. event.other.id ) local collisionPoint2 = display.newImageRect("collisionPoint.png",10,10) collisionPoint2.x, collisionPoint2.y = sensorCircle.x, sensorCircle.y -- sensorCircle.y+sensorCircle.contentHeight/2 print("Collision Center x|y = " .. collisionPoint2.x .. " | " .. collisionPoint2.y) elseif ( event.phase == "ended" ) and collisionHook == 1 then print( self.id .. ": collision ended with " .. event.other.id ) sensorCircle:removeSelf() collisionHook = 0 --sensorCircle = nil -- local collisionPoint2 = display.newImageRect("collisionPoint.png",10,10) -- collisionPoint2.x, collisionPoint2.y = sensorCircle.x, sensorCircle.y end end sensorCircle.collision = onLocalCollision sensorCircle:addEventListener( "collision", sensorCircle ) local function moveSensor() sensorCircle.x, sensorCircle.y = redSquare.x, redSquare.y end Runtime:addEventListener( "enterFrame", moveSensor ) end -- --local blueSquare = display.newRect( 80, 80, 40, 40 ) --blueSquare:setFillColor( 0, 0, 1 ) --physics.addBody( blueSquare, { friction=0 , filter=blueCollisionFilter } ) --blueSquare.id = "dummy" --floor.collision = onLocalCollision --floor:addEventListener( "collision", floor ) throwBody() local clockTimer = timer.performWithDelay( 4000, throwBody, -1 )

Hi @virtunox,

I think this is the correct setting you’re looking for:

https://docs.coronalabs.com/api/library/physics/setReportCollisionsInContentCoordinates.html

Take care,

Brent

Thanks a lot!

Hi @virtunox,

I think this is the correct setting you’re looking for:

https://docs.coronalabs.com/api/library/physics/setReportCollisionsInContentCoordinates.html

Take care,

Brent

Thanks a lot!