首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jbox2D -身体随机移动

Jbox2D -身体随机移动
EN

Stack Overflow用户
提问于 2013-09-03 07:19:20
回答 2查看 178关注 0票数 0

我和jbox2d有点小问题。

一旦调用了world.step方法,我的动态主体就会移出原来的位置。我尝试打印其他所有内容(静态物体的位置和动态物体的运动),结果都是正确的。

我认为这与重力有关(我不需要),但在我将world和dynamic body设置为0.0f后,它仍然给出了相同的问题。

那会是什么呢?

代码:

Level (构造函数)

代码语言:javascript
运行
复制
world = new World(new Vec2(0,10.0f));

Level (更新方法)

代码语言:javascript
运行
复制
world.step(1/60.0f, 8, 3);

动态实体(构造函数)

代码语言:javascript
运行
复制
physicsX = x / Map.METER_IN_PIXELS;
physicsY = y / Map.METER_IN_PIXELS;
initPhysicalBody(world);

init方法:

代码语言:javascript
运行
复制
public void initPhysicalBody(World world)
{
    BodyDef bd = new BodyDef();
    bd.type = BodyType.DYNAMIC;
    bd.position.set(physicsX, physicsY);
    bd.gravityScale = 0;
    PolygonShape ps = new PolygonShape();
    ps.setAsBox(getFrameSize().width(), getFrameSize().height());
    FixtureDef fd = new FixtureDef();
    fd.density = 1;
    fd.shape = ps;
    body = world.createBody(bd);
    body.createFixture(fd);
    System.out.println(body.getPosition());
}

更新方法

代码语言:javascript
运行
复制
body.setLinearVelocity(new Vec2(getLastDirection().getX() * getSpeed(), 
    getLastDirection().getY() * getSpeed()));

那会是什么呢?非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2013-09-03 14:10:36

我想问题出在这条线上。

代码语言:javascript
运行
复制
body.setLinearVelocity(new Vec2(getLastDirection().getX() * getSpeed(), 
getLastDirection().getY() * getSpeed()));

注释此行并运行您的程序。

票数 1
EN

Stack Overflow用户

发布于 2013-09-03 14:28:58

@Epi如果你根本不需要重力的话。然后你可以这样做

代码语言:javascript
运行
复制
world = new World(new Vec2(0,0));

bt根据您的解决方案,您已经将身体的重力比例设置为0,这肯定会很好地工作。

我认为在更新方法中,你设置了物体的线速度,这与重力无关。

因此,当你调用world.step(-)时,它会在一个实例中设置身体的速度和身体的散布。

所以我认为你应该调试你的价值是什么

代码语言:javascript
运行
复制
(new Vec2(getLastDirection().getX() * getSpeed(), getLastDirection().getY() * getSpeed())

你的问题只存在于这一行..使用它可以解决你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18581969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档