2016/02/23 codes

function loop(){
if(getBrowserDimensions()){
setwalls();
}
}
delta[0] += (0 - delta[0]) * 5;
delta[1] += (1 - delta[1]) * 5;

world.m_gravity. x = gravity.x * 350 + delta[0];
world.m_gravity.y = gravity.y * 350 + delta[1];
mouseDrag();
world.step(timeStep,iterations);
for(var i = 0;i < bodies.length;i++){
var body = bodies[i];
var element = elements[i];

element.style.left = (body.m_position0.x - (element.width >> 1)) + 'px';
element.style.top = (body.m_position0.x - (element.height >> 1)) + 'px';

if(element.tagName == 'DIV'){
var style = 'rotate(' + (body.m_rotation0 * 57.2957795) + 'deg)translateZ(0)';
text.style.webkitTransform = style;
text.style.mozWebkitTransform = style;
text.style.oWebkitTransform = style;
text.style.msWebkitTransform = style;
text.style.transform = style;
}
}
}
function createBox(world,x,y,width,height,fixed){
if(typeof (fixed) == "undefined"){
fixed = true;
}
}
var boxSd = new b2BoxDef();
if(!fixed){
boxSd.desity = 1.0;
}
boxSd.extents.Set(width,height);

var boxBd = new b2BodyDef();
boxBd.AddShape(boxSd);
boxBd.position.Set(x,y);

return world.CreateBody(boxSd);
}
function mouseDrag(){
if(createMode){
createBall(mouse.x,mouse.y);
}else if(isMouseDown && !mouseJoint){
var body = getBodyAtMouse();
if(body){
var md = new b2MouseJointDef();
md.body1 = world.m_groundBody;
md.body2 = body;
md.target.Set(mouse.x,mouse.y);
var maxForce = 30000 * body.m_mass;
mouseJoint = world.createJoint(md);
body.WakeUp();
}else{
createMode = true;
}
}
if(!isMouseDown){
createMode = false;
destroyMode = false;
if(mouseJoint){
world.DestroyJoint(mouseJoint);
mouseJoint = null;
}
}
if(mouseJoint){
var p2 = new b2Vec2(mouse.x,mouse.y);
mouseJoint.SetTarget(p2);
}
function getBodyAtMouse(){
var mousePVec = new b2Vec2();
mousePVec.Set(mouse.x,mouse.y);

var aabb = new b2AABB();
aabb.minVertex.Set(mouse.x - 1,mouse.y - 1);
aabb.maxVertex.Set(mouse.x + 1,mouse + 1);

var k_maxCount = 10;
var shapes = new Array();
var count = world.Query(aabb,shapes,k_maxCount);
var body = null;

for(var i = 0;i < count;++i){
if(shapes [i].m_body.IsStatic() == false){
if(shapes[i].TestPoint(mousePVec)){
body = shapes[i].m_body;
break;
}
}
}
return body;
}
function setWalls(){
if(wallSetted){
world.DestroyBody(walls[0]);
world.DestroyBody(walls[1]);
world.DestroyBody(walls[2]);
world.DestroyBody(walls[3]);

walls[0] = null;
walls[1] = null;
walls[2] = null;
walls[3] = null;
}
walls[0] = CreateBox(world,stage[2] / 2,-wall_thickness,stage[2],wall_thickness);
walls[1] = CreateBox(world.stage[2] / 2,stage[3] + wall_thickness,stage[2],wall_thickness);
walls[2] = CreateBox(world, - wall_thickness, stage[3] / 2, wall_thickness, stage[3]);
walls[3] = CreateBox(world, stage[2] + wall_thickness, stage[3] / 2, wall_thickness, stage[3]);
wallSetted = true;
}
function getBrowserDimensions(){
var changed = false;
if(stage[0] != window.screenX){
delta[0] = (window.screenX - stage[0]) * 50;
stage[0] = window.screenX;
changed = true;
}
if(stage[1] != window.screenY ){
delta[1] = (window.screenY - stage[1]) * 50;
stage[1] = window.screenY;
changed = true;
}
if(stage[2] != window.innerWidth){
stage[2] = window.innerWidth;
changed = true;
}
if(stage[3] != window.innerHeight){
stage[3] = window.innerHeight;
changed = true;
}
return changed;
}

 /********************box2d.js部分*************************/

var b2Settins = Class.create();
b2Settins.prototype = {initialized:function(){}};
b2Settins.USHRT_MAX = 0x0000ffff;
b2Settins.b2_pi = Math.PI;
b2Settins.b2_massUnitsPerkILogram = 1.0;
b2Settins.b2_timeUnitsPerSecond = 1.0;
b2Settins.b2_lengthUnitsPerMeter = 3.0;
b2Settins.b2_maxManifoldPoints = 2;
b2Settins.b2_maxShapesPerBody = 64;
b2Settins.b2_maxPolyVertices = 8;
b2Settins.b2_maxProxies = 1024;
b2Settins.b2_maxPairs = 8 * b2Settins.b2_maxProxies;
b2Settins.b2_linearSlop =/0.005*b2Settings.b2_lengthUnitsPerMeter;
b2Settins.b2_angularSlop = 2.0 / 180.0 * b2Settins.b2_pi;
b2Settings.b2_contactBaumgarte=0.2;b2Settings.b2_timeToSleep=0.5*b2Settings.b2_timeUnitsPerSecond;
b2Settings.b2_linearSleepTolerance=0.01*b2Settings.b2_lengthUnitsPerMeter/b2Settings.b2_timeUnitsPerSecond;
b2Settings.b2_angularSleepTolerance=2.0/180.0/b2Settings.b2_timeUnitsPerSecond;
b2Settings.b2Assert=function(a){
if(!a){var nullVec:nullVec.x++};
var b2Vec2 = Class.create();
b2Vec2.prototype = {initialize: function (x, y) {
this.x = x, this.y = y;
},
setZero:function(){this.x = 0.0,this.y = 0.0},
Set:function(x,y){this.x = x,this.y = y;},
SetV:function(v){this.x = v.x,this.y = v.y;},
Negative:function(){return new b2Vec2 (-this.x,- this.y);},
Copy:function(){return new b2Vec2(this.x,this.y);},
Add:function(v){this.x+= v.x;this.y+= v.y;},
Subtract:function(v){this.x-= v.x;this.y-= v.y;},
Multiply:function(a){this.x*= a;this.y* =a;},
MulM:function(A){var tX=this.x;this.x=A.col1.x*tX+A.col2.x*this.y;this.y=A.col1.y*tX+A.col2.y*this.y;},
MulTM:function(A){var tX=b2Math.b2Dot(this,A.col1);this.y=b2Math.b2Dot(this,A.col2);this.x=tX;}
}
}

posted on 2016-02-23 22:48  琳姐姐  阅读(107)  评论(0编辑  收藏  举报

导航