Estoy pensando que hay una respuesta simple a mi pregunta aparentemente simple, pero podría estar totalmente equivocado. De todos modos, soy nuevo en box2dWeb y en mi mundo Box2dWeb creo un piso y un simple objeto que cae. Cuando "depuro dibujar" en mi lienzo, veo caer la caja y todo. Todo lo que quiero hacer es dar salida a la posición x del objeto que caí que creé en los navegadores console.log y no funciona del todo bien. Console.log solo muestra la posición de inicio de mi objeto pero el número no se actualiza aunque mi objeto dentro del lienzo está cayendo. Después de horas de búsqueda con muchos motores de búsqueda y lugares como los tutoriales de Seth Ladds, llegué vacío. Espero que alguien aquí pueda ayudar. Proporcioné un código de muestra para ayudarme a explicarme un poco mejor. Espero eso ayude. Gracias a todos los que responden.¿Hay alguna manera en Box2dWeb para mostrar position.x de un objeto a console.log()?
var world;
function init() {
var b2Vec2 = Box2D.Common.Math.b2Vec2
, b2BodyDef = Box2D.Dynamics.b2BodyDef
, b2Body = Box2D.Dynamics.b2Body
, b2FixtureDef = Box2D.Dynamics.b2FixtureDef
, b2Fixture = Box2D.Dynamics.b2Fixture
, b2World = Box2D.Dynamics.b2World
, b2MassData = Box2D.Collision.Shapes.b2MassData
, b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape
, b2CircleShape = Box2D.Collision.Shapes.b2CircleShape
, b2DebugDraw = Box2D.Dynamics.b2DebugDraw
;
world = new b2World(
new b2Vec2(0, 10) //gravity
, true //allow sleep
);
var fixDef = new b2FixtureDef;
fixDef.density = 1.0;
fixDef.friction = 0.5;
fixDef.restitution = 0.2;
var bodyDef = new b2BodyDef;
//create ground
bodyDef.type = b2Body.b2_staticBody;
bodyDef.position.x = 9;
bodyDef.position.y = 13;
fixDef.shape = new b2PolygonShape;
fixDef.shape.SetAsBox(10, 0.5);
world.CreateBody(bodyDef).CreateFixture(fixDef);
//FIXTURE - define fixture
crateFixture = new b2FixtureDef;
//set object attributes
crateFixture.density = 0.9;
crateFixture.friction = 0.5;
crateFixture.restitution = 0.5;
//BODY - define body
crateDef = new b2BodyDef;
//setup type
crateDef.type = b2Body.b2_dynamicBody;
crateDef.position.x = 5;
crateDef.position.y = 5;
crateDef.angle = 65;
//SHAPE - define shape
crateFixture.shape = new b2PolygonShape;
//define shape
crateFixture.shape.SetAsBox(2, 2);
//add to our world
world.CreateBody(crateDef).CreateFixture(crateFixture);
//setup debug draw
var debugDraw = new b2DebugDraw();
debugDraw.SetSprite(document.getElementById("canvas").getContext("2d"));
debugDraw.SetDrawScale(30.0);
debugDraw.SetFillAlpha(0.3);
debugDraw.SetLineThickness(1.0);
debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);
world.SetDebugDraw(debugDraw);
window.setInterval(update, 1000/60);
};
function update() {
world.Step(
1/60 //frame-rate
, 10 //velocity iterations
, 10 //position iterations
);
world.DrawDebugData();
world.ClearForces();
console.log('the crate is located at ' + crateDef.position.x); //position of crate doesnt update
};
En realidad, 'CreateBody' debería devolver un' b2Body', que podría obtener la posición mediante 'crateBody.GetPosition(). X' – sntran
Mientras que .CreateBody() devuelve un b2body, .CreateBody(). CreateFixture() devuelve un b2fixture, que no tiene el método GetPosition() – OneThreeSeven