-
import com.actionsnippet.qbox.*;
-
import Box2D.Common.Math.*;
-
import Box2D.Collision.Shapes.*;
-
-
[SWF(width = 800, height = 600, backgroundColor = 0xFFFFFF, frameRate=60)]
-
-
// hide everything for 300 ms
-
visible = false;
-
setTimeout(function():void{ visible = true}, 300);
-
-
var sim:QuickBox2D = new QuickBox2D(this, {debug:false});
-
-
sim.setDefault({fillColor:0x666666, lineAlpha:0})
-
sim.createStageWalls();
-
-
makeLever(6 , 17.5, 9, "right", 0.7);
-
-
var circleA:QuickObject = sim.addCircle({x:2, y:3, radius:0.5, mass:4});
-
-
sim.addBox({x:15, y:12, width:2, height:0.5, density:0})
-
-
sim.addCircle({x:16, y:11, radius:0.5, mass:4, friction:0.2, fillColor:0});
-
-
sim.addBox({x:20.5, y:12, width:2, height:0.3, angle:-0.6, restitution:4.6, density:0})
-
-
makeLever(20 , 17.5, 8, "right", 1);
-
-
sim.addBox({x:9, y:9, width:2, height:0.5, density:0});
-
-
sim.addCircle({x:9, y:9, radius:0.5, mass:4, friction:0.2, fillColor:0});
-
-
sim.addBox({x:7, y:12, width:2, height:0.5, angle:-0.3, density:0, restitution:2});
-
-
sim.addBox({x:3, y:7, width:2, height:0.5, angle:Math.PI/2 - 0.22, density:0, restitution:3});
-
-
sim.addBox({x:13, y:15, width:2, height:0.5, density:0, angle:0.3, restitution:1});
-
-
sim.addBox({x:25.5, y:7, width:2, height:0.3, angle:-0.2, restitution:0.5, density:0})
-
-
sim.addBox({x:26, y:10, width:1, height:1, density:0,restitution:0.3});
-
-
sim.addBox({x:25, y:19, width:2, height:0.5, density:0, restitution:3.5, angle:-0.99});
-
-
sim.addBox({x:1, y:17, width:0.3, height:2, density:0, angle:-0.15, restitution:0.999});
-
-
sim.addBox({x:0.7, y:11, width:0.3, height:2, density:0, angle:-0.19, restitution:20})
-
-
sim.addBox({x:0.4, y:11.5, width:1, height:0.3, density:0})
-
-
function makeLever(xp:Number, yp:Number, boxWidth:Number, dir:String, off:Number=0, hasBox:Boolean=true):QuickObject{
-
var angle:Number, xpos:Number, weight:QuickObject
-
if (dir == "right"){
-
angle = 0.43;
-
xpos = xp + boxWidth / 2 - off;
-
}else{
-
angle = -0.43;
-
xpos = xp - boxWidth / 2 + off;
-
}
-
-
if (hasBox){
-
weight = sim.addBox({x:xpos , y:yp, width:0.5, height:0.5, angle:angle, fillColor:0});
-
}
-
-
var plank:QuickObject = sim.addBox({x:xp, y:yp, width:boxWidth, height:0.5, angle:angle});
-
var fulcrum:QuickObject = sim.addPoly({x:xp, y:yp, verts:[[0,0, 1,2, -1,2]], density:0})
-
sim.addJoint({type:"revolute", a:plank.body, b:fulcrum.body, collideConnected:false});
-
return weight;
-
}
-
-
sim.start();
Just playing around with QuickBox2D and brainstorming about a few features for the first non-alpha release. If you have any feature suggestions, please feel free to leave them in the comments of this post (see the end of this post for a list features to come in QuickBox2D 1.0).
Upcoming Features for QuickBox2D
Simplified collision detection - will hopefully be something like hitTest for QuickObject instances.
QuickBox2D.totalTimeSteps - variable that keeps track of how many times b2World.Step() was called - useful for simple sequencing.
QuickBox2D.addTimeStepEvent(callAt:Number, callback:Function) - calls a function when QuickBox2D.totalTimeSteps is equal to the callAt value.
QuickBox2D.stepEvent - an event dispatched every time b2World.Step() is called.
New Renderer [probably not for 1.0 release]
I've been toying with the idea of creating a new renderer for QuickBox2D. Currently all rigid bodies are DisplayObjects... this is great if you plan on skinning all your rigid bodies, but if you just have flat colors it is slower than debug draw - also, debug draw mode could be optimized a good deal. So I may create a simpler, faster renderer that draws to one Graphics instance (like debug draw mode) - but abides by QuickBox2D's simple rendering params like lineColor, fillColor, lineAlpha etc...
I also need to decide how to skin the rest of the joints, currently skins only work for distance joints...