Box2dWeb中是否有方法将对象的位置.x输出到console.log()
Is there a way in Box2dWeb to output position.x of an object to console.log()?
我认为我看似简单的问题有一个简单的答案,但我可能完全错了。无论如何,我是box2dWeb的新手,在我的box2dWeb世界里,我创造了一个地板和一个简单的坠落物体。当我在画布上"调试绘图"时,我看到盒子掉了下来,什么都没有。我所想做的就是将我创建的下落对象的x位置输出到浏览器console.log中,但它的工作不太好。console.log只显示我的对象的起始位置,但即使我的对象在画布中下落,数字也不会更新。在用许多搜索引擎和Seth Ladds教程等地方搜索了几个小时后,我一无所获。我希望这里有人能帮忙。我提供了一些示例代码来帮助更好地解释自己。希望能有所帮助。感谢所有回复的人。
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
};
好的,所以没有,因为缺乏任何专门针对Box2DWeb的真正文档,我终于解决了这个问题。很快我也想感谢芝加哥的Jer的回复,所以谢谢兄弟。无论如何,答案是:
一旦你把你的对象添加到你的世界中,就像这样:
crateFixture = world.CreateBody(crateBodyDef).CreateFixture(crateFixtureDef);
你可以获取你的物体的价值(在我的情况下是crateBody)如下:
console.log('crate X: ' + crateFixture.GetBody().GetPosition().x);
console.log('crate Y: ' + crateFixture.GetBody().GetPosition().y);
console.log('crate Angle: ' + crateFixture.GetBody().GetAngle());
希望这能帮助其他人!
好的,找不到Box2dWeb的api/doc,所以我下载了源代码,并确认了主体应该有一个位置。。。与其尝试使用crateBody变量,不如让我们循环浏览世界上所有的身体,看看我们是否可以打印它们的坐标。。。祝你好运
编辑:试试这个
// Add after world step call
for (b = world.GetBodyList(); b; b = b.GetNext()) {
console.log('the object is located at (' + b.position.x + ',' + b.position.y + ')');
}
var body = world.CreateBody(bodyDef);
body.CreateFixture(fixDef);
console.log(body.GetWorldCenter().x);
或
var body = world.CreateBody(bodyDef);
body.CreateFixture(fixDef);
console.log(body.GetPosition().x);
或
var body = world.CreateBody(bodyDef);
body.CreateFixture(fixDef);
console.log(body.GetWorldPoint(new b2Vec2(0,0)).x);
其中(0,0)是身体中心在局部坐标中的坐标。GetWorldPoint
函数将其转换为"世界坐标"。
我在使用Box2dWeb时遇到了类似的问题。感谢您发布此问题。使用@JerinChicago技巧,我找到了解决方案。
for (var b = world.GetBodyList() ; b; b = b.GetNext()) {
console.log('the object is located at (' + b.GetPosition().x + ',' + b.GetPosition().y + ')');
}
我希望这会有所帮助。
相关文章:
- console.log以外的Javascript输出函数
- Node.js/Express未输出console.log,highcharts.js给出未定义的错误
- 监视JavaScript输出,例如console.log()
- 节点console.log默认截断输出.我怎样才能看到完整的输出
- 为什么console.log()在我的代码中输出意外的0
- 避免使用capybaras webkit console.log输出
- Chrome console.log(elementID)在控制台中输出元素
- 在 Jasmine 测试中将 console.log() 的调用重定向到标准输出
- iWebInspector中的Console.log输出
- Javascript、string、RegEx、if和else if、console.log不同的输出
- Box2dWeb中是否有方法将对象的位置.x输出到console.log()
- 正在console.log中打印函数的输出
- 如何在console.log中查看函数的输出
- Chrome Javascript控制台-使用Console.log(obj)引用对象输出
- 为什么将变量的console.log()移动到第二个AJAX调用中会改变输出?
- console.log(5)的奇怪输出
- Linux环境下Sublime Text 3的console.log输出信息获取方法
- 如何使用console.log(Javascript)打印函数的输出
- 如何重写console.log()并在输出的开头添加一个单词?
- 在javascript中输出console.log有问题