UNPKG

p2s

Version:

A JavaScript 2D physics engine.

94 lines (81 loc) 2.85 kB
<!DOCTYPE html> <html> <head> <title>Constraints demo - p2.js physics engine</title> <script src="../build/p2.js"></script> <script src="../build/p2.renderer.js"></script> <link href="css/demo.css" rel="stylesheet"/> <meta name="description" content="Tests a few constraints."> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> </head> <body> <script> var N = 10, // Number of circles r = 0.1; // circle radius // Create demo application var app = new p2.WebGLRenderer(function(){ var world = new p2.World({ gravity : [0,-15] }); this.setWorld(world); world.solver.iterations = N; // Add a line lineBody = new p2.Body({ mass: 1, position: [-1.5,-0.5], angle: Math.PI / 2, angularVelocity : 10 }); lineBody.addShape(new p2.Line({ length: 1 })); world.addBody(lineBody); // Add a "null" body var groundBody = new p2.Body(); world.addBody(groundBody); var revolute = new p2.RevoluteConstraint(lineBody, groundBody, { worldPivot: [-1.5, 0] }); world.addConstraint(revolute); // Create circle rope var lastBody; for(var i=N-1; i>=0; i--){ var x = 0; var y = (N-i - N/2) * r * 2.1; var p = new p2.Body({ mass: i==0 ? 0 : 1, position: [x,y], }); p.addShape(new p2.Circle({ radius: r })); world.addBody(p); if(lastBody){ var c = new p2.DistanceConstraint(p, lastBody); world.addConstraint(c); } else { p.velocity[0] = 10; } lastBody = p; } // Create RevoluteConstraint var bodyA = new p2.Body({ mass: 1, position: [3,0], angularVelocity: 30 }); bodyA.addShape(new p2.Circle({ radius: 1 })); world.addBody(bodyA); var bodyB = new p2.Body({ mass: 0, position: [3,4], }); bodyB.addShape(new p2.Circle({ radius: 1 })); world.addBody(bodyB); var cr = new p2.RevoluteConstraint(bodyA, bodyB, { worldPivot: [3, 2] }); cr.setLimits(-Math.PI / 4, Math.PI / 4); world.addConstraint(cr); this.frame(0, 0, 8, 8); }); </script> </body> </html>