Physics Objects Sticking Together

I have an app that has an object that is dynamic and other objects that are static. The dynamic object is subject to gravity. When the dynamic object contacts a static object - if it remains still for any length of time it seems to get stuck to the static object.

Here is our code



– level1.lua


local storyboard = require( “storyboard” )
local scene = storyboard.newScene()

– include Corona’s “physics” library
local physics = require “physics”
physics.start(); physics.pause()
physics.setDrawMode( “hybrid” )


– forward declarations and other locals
local screenW, screenH, halfW = display.contentWidth, display.contentHeight, display.contentWidth*0.5


– BEGINNING OF YOUR IMPLEMENTATION

– NOTE: Code outside of listener functions (below) will only be executed once,
– unless storyboard.removeScene() is called.


function drawMyLine(x1,y1, x2,y2)

local myLine = display.newLine( x1,y1, x2,y2 )
myLine:setColor( 115, 0, 0 )
myLine.width = 5

lineShape = { 0,0 , 0,0 , x2-x1,y2-y1 , x2-x1,y2-y1 }
physics.addBody(myLine, {density=1.0, friction =.0, bounce = .3 , shape = lineShape})
myLine.bodyType =“static”
myLine.pieceType = “line”

end

function drawHole(x1,y1, s1)

local circle = display.newCircle( x1, y1, s1 ) – Green circle is
circle:setFillColor( 0, 0, 0 )
circle.pieceType = “circle”
physics.addBody(circle, {density=1.0, friction =.0, bounce = .3 })
circle.bodyType =“static”;
–circle.Width = 50 ??? How do you change circle diameter?

end

local function onTilt( event )

physics.setGravity( (10 * event.yGravity) * -1, (10 * event.xGravity) * -1 )
end

Runtime:addEventListener( “accelerometer”, onTilt )

function checkgrav()
gx, gy = physics.getGravity()
print(gx, gy)
physics.setGravity( 0, grav)
end

local function onCollision( event )
if ( event.phase == “began” ) then

for k,v in pairs(event) do print(k) end
print( "began: " … event.object1.pieceType … " " … event.object2.pieceType)

elseif ( event.phase == “ended” ) then

–print( "ended: " … event )

end
end

Runtime:addEventListener( “collision”, onCollision )

– Called when the scene’s view does not exist:
function scene:createScene( event )
local group = self.view

drawMyLine(1,1,480,1); – top border
drawMyLine(1,1,1,320); – left border
drawMyLine(480,1,480,320); – right border
drawMyLine(1,319,479,319); – bottom border
drawMyLine(40,40,40,279); – first line
drawMyLine(160,319,160,209);
drawMyLine(160,1,160,110);
drawMyLine(1,319,479,319);
drawMyLine(1,319,479,319);
drawMyLine(1,319,479,319);
drawMyLine(1,319,479,319);
drawHole(58,60,15);
drawHole(58,110,15);
drawHole(58,160,15);
drawHole(58,210,15);
drawHole(58,260,15);
–drawHole(58,180,15);
drawHole(142,40,15);
drawHole(142,90,15);
drawHole(142,230,15);
drawHole(142,280,15);

group:insert( background )

–Draw the marble once
myMarble = display.newCircle( 100, 100, 10 )
myMarble:setFillColor(211, 208, 208)
physics.addBody(myMarble, {density=2.0, friction =.0, bounce = .3 });
myMarble.pieceType = “marble”
myMarble.isBullet = true
end

– Called immediately after scene has moved onscreen:
function scene:enterScene( event )
local group = self.view

physics.start()

end

– Called when scene is about to move offscreen:
function scene:exitScene( event )
local group = self.view

physics.stop()

end

– If scene’s view is removed, scene:destroyScene() will be called just prior to:
function scene:destroyScene( event )
local group = self.view

package.loaded[physics] = nil
physics = nil
end


– END OF YOUR IMPLEMENTATION

– “createScene” event is dispatched if scene’s view does not exist
scene:addEventListener( “createScene”, scene )

– “enterScene” event is dispatched whenever scene transition has finished
scene:addEventListener( “enterScene”, scene )

– “exitScene” event is dispatched whenever before next scene’s transition begins
scene:addEventListener( “exitScene”, scene )

– “destroyScene” event is dispatched before view is unloaded, which can be
– automatically unloaded in low memory situations, or explicitly via a call to
– storyboard.purgeScene() or storyboard.removeScene().
scene:addEventListener( “destroyScene”, scene )


return scene [import]uid: 148663 topic_id: 27000 reply_id: 327000[/import]