2014-02-18 71 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