私は一見単純な質問に簡単な答えがあると思っていますが、私は全く間違っている可能性があります。とにかく私はbox2dWebを初めて使っています。私のBox2dWeb世界では、床と単純な落下物を作成しています。キャンバスに「ドロー・ドロー」すると、箱が落ちて、すべてが見えます。私がしたいのは、私が作成した落下オブジェクトのx位置をブラウザのconsole.logに出力するだけで、正しく動作しません。 console.logにはオブジェクトの開始位置が表示されますが、キャンバス内のオブジェクトが落ちていても番号は更新されません。多くの検索エンジンやSeth Laddsのチュートリアルのような場所で何時間も検索した後、私は空になった。ここの誰かが助けてくれることを願っています。私は少し自分自身を説明するのに役立つサンプルコードをいくつか用意しました。それが役に立てば幸い。誰にも感謝します。代わりにcrateBodyのVARを使用しようと、ちょうどループすることができます...Box2dWebには、オブジェクトのposition.xを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
};
実際には、 'CreateBody'は' c2Body'を返すべきです、 'crateBody.GetPosition()。x' – sntran
によって位置を得ることができます.CreateBody()はb2body、.CreateBody()を返しますが、CreateFixture b2fixture、メソッドGetPosition()を持たない – OneThreeSeven