Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

how to destroy a physics joint?

edited June 2013 in Questions Posts: 645

i have been playing with the fantastic codea for a couple months and this is my first communication on the forum.
First of all my complements to TTL for a great job!

For the game i am working on i would like to be able to destroy a joint between two bodies. Is this possible?

Comments

  • dave1707dave1707 Mod
    edited June 2013 Posts: 9,725

    Here's code that I posted in another discussion. I added code to destroy one of the joints when you do a double tap. Just run the program and when you're ready, double tap the screen.

    EDIT1: Changed and reposted the program.
    EDIT2: Changed the program again to keep the line and joint circle after breaking the joint.
    EDIT3: Changed the program again for a more realistic joint break.



    supportedOrientations(PORTRAIT) displayMode(FULLSCREEN) function setup()     dest=false     c1 = physics.body(CIRCLE,0)     c1.x = 400     c1.y = 1000     c1.type = STATIC         c2 = physics.body(CIRCLE,25)     c2.x = 200     c2.y = 900       c2.sensor=true       c3 = physics.body(CIRCLE, 25)     c3.x = 500     c3.y = 950       c3.sensor=true       c4 = physics.body(CIRCLE, 25)     c4.x = 300     c4.y = 850       c4.sensor=true       p1=physics.body(POLYGON,vec2(-10,25),vec2(-10,-25),vec2(10,-25),vec2(10,25))      p1.x=400     p1.y=850      p1.sensor=true       joint1 = physics.joint(REVOLUTE,c1,c2,c1.position)     joint2 = physics.joint(REVOLUTE, c2, c3,vec2(c2.x,c2.y))       joint3 = physics.joint(REVOLUTE, c3, c4,vec2(c3.x,c3.y))      joint4 = physics.joint(REVOLUTE, c4, p1,vec2(c4.x,c4.y))            end function draw()     background(40, 40, 50)     fill(255)     strokeWidth(2)         line(c1.x,c1.y,c2.x,c2.y)     line(c2.x,c2.y,c3.x,c3.y)      if not dest then         line(c3.x,c3.y,c4.x,c4.y)      else         line(c5.x,c5.y,c4.x,c4.y)         ellipse(c5.x,c5.y,8)     end     line(c4.x,c4.y,p1.x,p1.y)                ellipse(c1.x,c1.y,8)             ellipse(c2.x,c2.y,8)      ellipse(c3.x,c3.y,8)       ellipse(c4.x,c4.y,8)       translate(p1.x,p1.y)     rotate(p1.angle)     points = p1.points     for j = 1,#points do         a = points[j]         b = points[(j % #points)+1]         line(a.x, a.y, b.x, b.y)         end end function touched(t)     if t.state==BEGAN and t.tapCount==2 then         dest=true          c5=physics.body(CIRCLE,25)         c5.x=c3.x         c5.y=c3.y         c5.linearVelocity=c3.linearVelocity         joint5 = physics.joint(REVOLUTE, c5, c4,vec2(c5.x,c5.y))          joint3:destroy()     end end

        
        
        
        

  • dave1707dave1707 Mod
    Posts: 9,725

    Updated the above program to keep the line, joint circle and a more realistic joint break.

  • Posts: 645

    Perfect. Thank you very much!

  • Reading the description of reactionForce and reactionTorque of physics.joint, it seems that it is possible to break joints by applying forces to bodies rather than programmaticaly, but after trying quite a few things I cannot get it to work. Does anyone has a short working example, please?

Sign In or Register to comment.