[英]Libgdx - Box2D: Attach Physics Body Editor Loader mask to dynamic texture
我有一个圆形的纹理,当发生触摸拖动时,该纹理将被绘制到新的位置。 它没有设置为主体。
我已经使用Aurelien Ribon的“ Physics Body Editor”加载程序GUI绘制了一个物理图,并将其绘制到圆的上部和下部,我想在纹理的位置上绘制该蒙版,并在发生拖动时绘制到其新位置。
我怎样才能做到这一点? 在我的create方法中,我初始化变量,蒙版被绘制到纹理的初始位置,但是当我移动它时,蒙版停留在圆的初始位置。
这是我的代码:
Create()
方法:
//... rest of the method ommited for clarity
karika = gameWorld.getKarika();
World world = new World(new Vector2(0, 0), false);
Box2DDebugRenderer renderer = new Box2DDebugRenderer();
BodyEditorLoader karikaLoader = new BodyEditorLoader(Gdx.files.internal("data/collision-masks/karika.json"));
BodyDef karikaDef = new BodyDef();
karikaDef.type = BodyType.DynamicBody;
karikaDef.position.set(karika.getPosition().x, karika.getPosition().y);
karikaDef.angle = karika.getRotation();
Body karikaBody = world.createBody(karikaDef);
FixtureDef karikaFixture = new FixtureDef();
karikaFixture.density = 0.5f;
karikaFixture.friction = 0.8f;
karikaFixture.restitution = 0.6f;
karikaLoader.attachFixture(karikaBody, "karika", karikaFixture, karika.getWidth());
Vector2 karikaBodyOrigin = karikaLoader.getOrigin("karika", karika.getWidth()).cpy();
//rest of the method ommited for clarity
我的render()
方法:
//...
batch.begin();
batch.draw(karikaTexture, karika.getPosition().x, karika.getPosition().y, karika.getWidth() / 2, karika.getHeight() / 2, karika.getWidth(), karika.getHeight(), 1, 1, karika.getRotation(), 0, 0, karikaTexture.getWidth(), karikaTexture.getHeight(), false, false);
batch.end();
renderer.render(world, cam.combined);
world.step(1 / 60f, 6, 2);
//...
在render方法中绘制的纹理是我圈子的纹理。 如前所述,我还没有将其设置为主体,只是防撞面具。
我想做的是将蒙版附加到纹理上,并保持其位置不变,例如当我拖动圆时,蒙版应保留在圆上。
查看DebugRenderer 。 它工作得很好,并且恰好满足您的要求。
这是使用方法。
debugRenderer.render(this.world, camera.combined);
这是更详尽的教程 。
我建议您使用物理对象的位置分配圆的位置,而不要尝试将物理对象分配给纹理的位置。
在您的代码中,好像您使用karikaBody
的当前位置创建了karika
,但是karikaBody
永远不会更新karikaBody
位置。 因此,您的“碰撞面罩”(您的物理身体)的位置永远不会改变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.