我是JBox2D的新手。我第一次在Android上尝试JBox2D (我知道Android的开发,我擅长它),因为我的项目需要物理。
现在,Box2D的教程和“官方用户手册”说负重力会导致物体向下被吸引。但是,在我的例子中,当我将Vec2's第二个参数设置为负值时,对象被向上吸引了!
下面是代码,它的结果是一个独立的圆圈形状:
重力:
Vec2 gravity = new Vec2(0.0f, -50.0f);
boolean doSleep = true;
world = new World(gravity, doSleep);圆圈形状是通过以下代码生成的:
//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画布绘制:
canvas.drawCircle(body.getPosition().x, body.getPosition().y, 10, paint);而stepp-ing如下:
float timeStep = 1.0f / 60.f;
int velocityIterations = 6;
int positionIterations = 2;
world.step(timeStep, velocityIterations, positionIterations);那么,我的代码有什么问题?我无法辨认我所犯的错误。
另外,我在安卓系统上制作了一款类似网球的2D游戏,我将使用JBox2D。那么,有人能告诉我关于JBox2D的教程/书吗?尽管我在谷歌上搜索得很厉害,但我找不到一本好的教程。(尽管Box2D似乎比JBox2D更受欢迎)
如果有人能帮助我,我会非常感激的。谢谢。
发布于 2013-01-31 17:58:21
在Box2D中有标准坐标系:y指向右边,X指向右边。在图形系统中,通常坐标系是Y向下的,因为窗口有静态的左上角.就像在你的图形系统里一样。所以,Box2D中的东西是向下移动的,你看到的是向上移动。
这是一个易怒的问题,而引导重力上升并不是最好的解决办法。如果你只改变重力,那么你需要考虑很多其他情况下的向上下降问题,例如,当定义物体时,施加力等等。最令人恼火的是,这是不容易理解的,物理坐标是如何符合图形的(例如,在我的一个项目中,我必须在纸上画点,然后把纸转回来,在180个等级上旋转,然后看着灯:)。
您不能更改Box2D坐标系,但最有可能的是,您可以通过更改转换矩阵轻松地更改图形系统的坐标系。例如,在OpenGL中,如下所示:
glScalef(1.0, -1.0, 1.0);但请注意,在此之后,所有具有正Y坐标的屏幕上都将不可见(它将位于窗口顶部边缘之上)。所以,你需要负坐标的工作。如果你不想这样,你可以像这样把矩阵转换成这样:
glTranslatef(0.0, -windowHeight.0, 0.0)但在此之前,考虑一下如果窗口被调整大小,该做些什么。
关于第二个问题。我怀疑你是否能为JBox2D找到任何地方的教程或书籍。JBox2D是Box2D的端口(意思是,它是Box2D的精确副本),并且为它写一本特别的书看起来很奇怪。学习Box2D,您就不会对JBox2D有问题了。例如,您可以查看那里。
https://stackoverflow.com/questions/14626929
复制相似问题