Sto pensando che c'è una semplice risposta alla mia domanda apparentemente semplice, ma potrei sbagliarmi completamente. Ad ogni modo sono nuovo a box2dWeb e nel mio mondo Box2dWeb creo un pavimento e un semplice oggetto cadente. Quando "debug draw" nella mia tela vedo la scatola che cade e tutto. Tutto quello che voglio fare è mostrare la posizione x dell'oggetto che ho creato nel browser console.log e non funziona abbastanza bene. Il file console.log mostra solo la posizione iniziale del mio oggetto ma il numero non si aggiorna anche se il mio oggetto all'interno del canvas sta calando. Dopo ore di ricerche con molti motori di ricerca e posti come tutorial su Seth Ladds, mi sono ritrovato vuoto. Spero che qualcuno qui possa aiutarti. Ho fornito un codice di esempio per aiutare a spiegarmi un po 'meglio. Spero che sia d'aiuto. Grazie a tutti quelli che rispondono.C'è un modo in Box2dWeb per mostrare position.x di un oggetto su 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
};
In realtà, 'CreateBody' dovrebbe restituire un' b2Body', che potresti ottenere dalla posizione di 'crateBody.GetPosition(). X' – sntran
While .CreateBody() restituisce un b2body, .CreateBody(). CreateFixture() restituisce un b2fixture, che non ha il metodo GetPosition() – OneThreeSeven