2014-02-18 76 views
2

我有一个圆形的动态身体,我需要在游戏过程中调整它(它看起来像一个点,然后它增长到一个圆,然后开始移动)。我应该怎么做? 我有一个想法 - 它是使用一些动画(Circle具有相同的半径,但由于动画看起来像圈子增长),但我不确定它是否正确。 (此外,我不知道如何去实现它)动态调整身体尺寸(LibGDX)

+0

是否使用Box2D的,你所谈论的身体?也许你可以看看scene2D,它提供了所谓的“动作”,你可以告诉“演员”他应该如何随着时间的推移而改变。还有一些关于如何使用Box2D的教程。但我从来没有尝试过,所以这只是一个建议。 – Springrbua

回答

2

缩放圈,如果你使用的精灵只是它的规模sprite.setScale(浮动),如果你的精灵连接到Box2D的圆形状,然后拿到身体的形状和设置半径

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

如果您使用ShapeRenderer只是乘以ShapeRenderer的点。

+0

它不适用于spritehelper levelhelper。我正在使用cocos2d-x v2.2.1。有任何想法吗? –

2

我假定你正在谈论Box2D的身体。

无法用Box2D更改圆形固定装置。 Box2D是一个刚体身体模拟器。你需要做的是摧毁夹具并用较小/较大版本的圆圈代替它。但是这会造成很多问题,因为例如当你仍然有接触时你不能销毁灯具。

将圆圈保持为相同的大小会更好,并且只需在顶部使用动画效果来模拟大小的变化。

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

1

里面搭配Box2D的任何对象类,我用下面的动态调整:

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