Libgdx 单位转换Box2D,结果怪异
我正在使用LibGDX并试图学习box2D,但是这个单位转换让我困惑,我想:我得到了一个256x256像素的图像,想要创建一个表示这个图像的实体,使用1:32的比例,所以每次我想要将值传递到box2D比例,我必须将它除以32或乘以1/32,这是相同的等式,每次我想从这个世界得到像素级的值,我必须将它乘以32,但问题仍然是一样的:不能得到好的模拟,我会把我的代码放在这里,让你看看我是怎么做的。我也会把变量放在这里,这样你就可以按ctrl+c和ctrl+v:Libgdx 单位转换Box2D,结果怪异,libgdx,box2d,Libgdx,Box2d,我正在使用LibGDX并试图学习box2D,但是这个单位转换让我困惑,我想:我得到了一个256x256像素的图像,想要创建一个表示这个图像的实体,使用1:32的比例,所以每次我想要将值传递到box2D比例,我必须将它除以32或乘以1/32,这是相同的等式,每次我想从这个世界得到像素级的值,我必须将它乘以32,但问题仍然是一样的:不能得到好的模拟,我会把我的代码放在这里,让你看看我是怎么做的。我也会把变量放在这里,这样你就可以按ctrl+c和ctrl+v: private SpriteBa
private SpriteBatch batch;
private ShapeRenderer srender;
private Texture img;
private World world;
private Body bad, bridge;
private OrthographicCamera cam, cam2;
private Box2DDebugRenderer render;
@Override
public void create () {
srender = new ShapeRenderer();
batch = new SpriteBatch();
img = new Texture("badlogic.jpg");
cam = new OrthographicCamera(500f, 500f);
cam.translate(250f, 250f);
cam.update();
//Used to draw the box2D world scaled to the pixels size
cam2 = new OrthographicCamera(500 * 0.03125f, 500 * 0.03125f);
cam2.translate(250f * 0.03125f, 250f * 0.03125f);
cam2.update();
render = new Box2DDebugRenderer();
world = new World(new Vector2(0f, -10f), true);
BodyDef bdef = new BodyDef();
bdef.type = BodyType.DynamicBody;
bad = world.createBody(bdef);
PolygonShape pshape = new PolygonShape();
pshape.setAsBox(img.getWidth() * 0.03125f, img.getHeight() * 0.03125f);
FixtureDef fdef = new FixtureDef();
fdef.shape = pshape;
bad.createFixture(fdef);
/*Criando a ponte*/
bdef.type = BodyType.StaticBody;
bridge = world.createBody(bdef);
pshape.setAsBox(500f * 0.03125f, 5f * 0.03125f);
bridge.createFixture(fdef);
bad.setTransform(new Vector2(250f * 0.03125f, 500f * 0.03125f) , 0);
bridge.setTransform(new Vector2(250f * 0.03125f, 0f * 0.03125f), 0);
batch.setProjectionMatrix(cam.combined);
srender.setProjectionMatrix(cam.combined);
}
@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(img, (bad.getPosition().x - img.getWidth()/2 * 0.03125f) * 32,
(bad.getPosition().y - img.getHeight()/2 * 0.03125f) * 32);
batch.end();
render.render(world, cam2.combined);
srender.begin(ShapeRenderer.ShapeType.Filled);
srender.circle(250f, 500f, 5f);
srender.circle(250f, 0f, 5f);
srender.end();
world.step(1/60f, 6, 2);
}
如果您运行此代码,您将看到创建的框仍然不适合图像大小,图像停止在屏幕中间移动,而它应该只停止在底部,这里有人可以帮助我吗?谢谢你的关注
Ps:我已经听说过要更改视口,但我仍在尝试学习这种转换,之后我会去寻找视口。看看你真的应该看看@Xoppa的博客。不幸的是,有些教程使用某种像素到单位的转换。但是libgdx已经有了一个工具来为您实现这一点:Viewport。因此,与其自己转换像素,不如让视口为您转换像素!