【发布时间】:2014-04-12 09:30:24
【问题描述】:
我正在尝试在 libgdx 中使用 box2d 制作示例。
我希望球在 box2d 世界中随重力下落。现在它下降但没有加速度(我看到球以加速度=0下降)。我尝试添加阻尼、密度……但没有任何变化。请帮我找出我的错。非常感谢。
这是此问题的视频:youtube.com/watch?v=NkbcVMsB2S0
;在此视频中,您可以看到圆圈以加速度 = 0 下降。我试图改变一些参数,但看起来加速度总是为零。
这是一个简单的类:
public class MyGdxGame implements ApplicationListener, InputProcessor {
World world;
Box2DDebugRenderer debugRenderer;
OrthographicCamera camera;
static final float BOX_STEP = 1 / 45f;
static final int BOX_VELOCITY_ITERATIONS = 6;
static final int BOX_POSITION_ITERATIONS = 2;
static final float WORLD_TO_BOX = 0.01f;
static final float BOX_WORLD_TO = 100f;
private int counter = 100;
private Body body;
@Override
public void create() {
world = new World(new Vector2(0, -200f), false);
world.setContinuousPhysics(true);
camera = new OrthographicCamera();
camera.viewportHeight = 320;
camera.viewportWidth = 480;
camera.position.set(camera.viewportWidth * .5f,
camera.viewportHeight * .5f, 0f);
camera.update();
// Ground body
BodyDef groundBodyDef = new BodyDef();
groundBodyDef.position.set(new Vector2(0, 10));
Body groundBody = world.createBody(groundBodyDef);
PolygonShape groundBox = new PolygonShape();
groundBody.createFixture(groundBox, 0.0f);
// Dynamic Body
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyType.DynamicBody;
bodyDef.position.set(camera.viewportWidth / 2, camera.viewportHeight);
bodyDef.angularDamping = 0.01f;
bodyDef.linearDamping = 0.0f;
body = world.createBody(bodyDef);
CircleShape dynamicCircle = new CircleShape();
dynamicCircle.setRadius(10f);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = dynamicCircle;
fixtureDef.density = 10.0f;
fixtureDef.friction = 0.0f;
fixtureDef.restitution = 0f;
body.createFixture(fixtureDef);
MassData massData = new MassData();
massData.mass = 50f;
body.setMassData(massData);
body.setGravityScale(1f);
debugRenderer = new Box2DDebugRenderer();
Gdx.input.setInputProcessor(this);
}
@Override
public void dispose() {
}
@Override
public void render() {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
if (counter < 10) {
body.applyForceToCenter(0, 200000f, true);
}
counter++;
debugRenderer.render(world, camera.combined);
world.step(BOX_STEP, BOX_VELOCITY_ITERATIONS, BOX_POSITION_ITERATIONS);
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public boolean keyDown(int keycode) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean keyUp(int keycode) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean keyTyped(char character) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
counter = 0;
return false;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean scrolled(int amount) {
// TODO Auto-generated method stub
return false;
}
【问题讨论】:
-
我不明白你的问题。你想让它掉下来还是不掉下来?它会掉还是不会掉?
-
抱歉我的问题不清楚。我希望球在重力下落下。现在它下落但没有重力(我看到球以加速度 =0 下落)
-
我不明白,在
world = new World(new Vector2(0, -200f), false);这一行中,您将重力设置为极高的值(大约是地球重力的20 倍),然后您说它在没有重力的情况下下落?如果不是重力,你为什么认为它会向下加速? -
我的意思是没有加速。等我发这个视频。
-
这是此问题的视频:youtube.com/watch?v=NkbcVMsB2S0<br> 在此视频中,您可以看到圆在加速度=0 的情况下下降。我试图改变一些参数,但看起来加速度总是为零..