首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JBox2d:负重力导致物体上升?

JBox2d:负重力导致物体上升?
EN

Stack Overflow用户
提问于 2013-01-31 13:29:55
回答 1查看 572关注 0票数 0

我是JBox2D的新手。我第一次在Android上尝试JBox2D (我知道Android的开发,我擅长它),因为我的项目需要物理。

现在,Box2D的教程和“官方用户手册”说负重力会导致物体向下被吸引。但是,在我的例子中,当我将Vec2's第二个参数设置为负值时,对象被向上吸引了!

下面是代码,它的结果是一个独立的圆圈形状:

重力:

代码语言:javascript
运行
复制
Vec2 gravity = new Vec2(0.0f, -50.0f);
boolean doSleep = true;
world = new World(gravity, doSleep);

圆圈形状是通过以下代码生成的:

代码语言:javascript
运行
复制
    //body definition
    BodyDef bd = new BodyDef();
    bd.position.set(200, 500);  
    bd.type = BodyType.DYNAMIC;

    //define shape of the body.
    CircleShape cs = new CircleShape();
    cs.m_radius = 10f;  

    //define fixture of the body.
    FixtureDef fd = new FixtureDef();
    fd.shape = cs;
    fd.density = 1f;
    fd.friction = 0.2f;        
    fd.restitution = 0.8f;

    //create the body and add fixture to it
    body =  world.createBody(bd);
    body.createFixture(fd);

我使用SurfaceView画布绘制:

代码语言:javascript
运行
复制
canvas.drawCircle(body.getPosition().x, body.getPosition().y, 10, paint);

而stepp-ing如下:

代码语言:javascript
运行
复制
float timeStep = 1.0f / 60.f;
int velocityIterations = 6;
int positionIterations = 2;

world.step(timeStep, velocityIterations, positionIterations);

那么,我的代码有什么问题?我无法辨认我所犯的错误。

另外,我在安卓系统上制作了一款类似网球的2D游戏,我将使用JBox2D。那么,有人能告诉我关于JBox2D的教程/书吗?尽管我在谷歌上搜索得很厉害,但我找不到一本好的教程。(尽管Box2D似乎比JBox2D更受欢迎)

如果有人能帮助我,我会非常感激的。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-31 17:58:21

在Box2D中有标准坐标系:y指向右边,X指向右边。在图形系统中,通常坐标系是Y向下的,因为窗口有静态的左上角.就像在你的图形系统里一样。所以,Box2D中的东西是向下移动的,你看到的是向上移动。

这是一个易怒的问题,而引导重力上升并不是最好的解决办法。如果你只改变重力,那么你需要考虑很多其他情况下的向上下降问题,例如,当定义物体时,施加力等等。最令人恼火的是,这是不容易理解的,物理坐标是如何符合图形的(例如,在我的一个项目中,我必须在纸上画点,然后把纸转回来,在180个等级上旋转,然后看着灯:)。

您不能更改Box2D坐标系,但最有可能的是,您可以通过更改转换矩阵轻松地更改图形系统的坐标系。例如,在OpenGL中,如下所示:

代码语言:javascript
运行
复制
glScalef(1.0, -1.0, 1.0);

但请注意,在此之后,所有具有正Y坐标的屏幕上都将不可见(它将位于窗口顶部边缘之上)。所以,你需要负坐标的工作。如果你不想这样,你可以像这样把矩阵转换成这样:

代码语言:javascript
运行
复制
glTranslatef(0.0, -windowHeight.0, 0.0)

但在此之前,考虑一下如果窗口被调整大小,该做些什么。

关于第二个问题。我怀疑你是否能为JBox2D找到任何地方的教程或书籍。JBox2D是Box2D的端口(意思是,它是Box2D的精确副本),并且为它写一本特别的书看起来很奇怪。学习Box2D,您就不会对JBox2D有问题了。例如,您可以查看那里

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

https://stackoverflow.com/questions/14626929

复制
相关文章

相似问题

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