动态调整身体大小(LibGDX)

时间:2014-02-18 16:32:20

标签: dynamic resize libgdx

我有一个圆形的动态身体,我需要在比赛期间调整它(它看起来像一个点,然后它变成一个圆圈,之后它开始移动)。我该怎么办? 我有一个想法 - 它是使用一些动画(圆圈具有相同的半径,但由于动画看起来像圆圈增长),但我不确定它是否正确。 (除了我不知道如何实现它)

3 个答案:

答案 0 :(得分:2)

对于缩放圆,如果你正在使用精灵,只需缩放 sprite.setScale(float),如果你的精灵附加到Box2d圆形,那么得到Body的形状并设置半径

Shape shape = body.getFixture().getShape;
shape.setRadius(radiusValue);

如果你正在使用ShapeRenderer,只需乘以ShapeRenderer的点。

答案 1 :(得分:2)

我认为你在谈论Box2D的身体。

使用Box2D无法更改圆形夹具。 Box2D是刚性身体模拟器。您需要做的是销毁夹具并用更小/更大的圆形版本替换它。但是这会导致很多问题,因为例如,当仍有接触时你不能销毁固定装置。

最好保持圆圈的大小相同,只需用顶部纹理动画模拟大小的变化。

如果你无法模拟,那么可以尝试以下方法:让不同大小的圆圈的几个版本保持在彼此的顶部。实现一个ContactFilter,它只会导致当前“活动”的一个圆圈的联系人。

答案 2 :(得分:1)

在任何带有box2d的Object类中,我使用以下内容进行动态调整大小:

public void resize(float newradius) {
    this.body.destroyFixture(this.fixture); 
    fixtureDef.density = (float) (this.mass/(Math.PI*newradius*newradius)); 
    this.radius = newradius; 

    CircleShape circle = new CircleShape(); 
    circle.setRadius(newradius); 
    this.fixtureDef.shape = circle; 
    circle.dispose(); 

    this.fixture = body.createFixture(fixtureDef); 
    this.fixture.setUserData(this);
}

您还可以看到以下主题:How to change size after it has been created