2014-09-19 77 views
1

我試圖在一個傳感器的圓體上做一個渦旋效果。 我一直在尋找這一點,所有的例子我尋找在C++或Objective C和我似乎沒有給他們好翻譯。如何創建漩渦/渦流效果?

當我的對象collition,它調用beginContact(..),它設置一個標誌,這樣我可以調用bodyToUpdate.applyForce(...);

public void beginContact(Contact contact) { 
      setColliding(true); 
} 

//updating collition every frame 
public void act(){ 
    if (colliding) { 
     ball.getBody().applyForce(....); 

} 

如何計算每幀施加的力量使其成爲渦旋?

編輯:

,所以我現在有直行到漩渦的中心目標,但沒有「旋轉」

public void act() { 
    if (colliding) { 
     ball.getBody().setLinearVelocity(0, 0); 

     ball.getBody().applyForce((portal.getBody().getPosition().x - ball.getBody().getPosition().x) * i, 
       (portal.getBody().getPosition().y - ball.getBody().getPosition().y) * i, 
       ball.getBody().getPosition().x, ball.getBody().getPosition().y, true); 

     i++; 
    } else 
     i = 10; 
} 

回答

0

你想實現一個數量級的切向力朝着渦旋的中心增加。

下面是一些僞代碼。

radialVector = objectPosition - vortexPosition; 
tangentialVector = radialVector.perpendicularVector(); 

if (radialVector.length() < vortexRadius) { 

    // Swirl faster when near the center of the vortex. 
    // Max tangential force when distance from center is 0. 
    // Min tangential force when distance from center is vortexRadius. 
    forceMagnitude = map(radialVector.length(), vortexRadius, 0, minTangentialForce, maxTangentialForce); 
    force = forceMagnitude * tangentialVector.normalize(); 
    object.applyForce(force); 

} 

下面是示出了矢量分量的圖像:

Radial and tangential components.

要創建一個漩渦效應應該有增加的徑向(FR)和切向(FT)的力作爲對象移動得更靠近中心。

0

如果「旋轉」你的意思是,下落的物體將沿曲線或螺旋移動,而然後朝黑洞立即改變移動方向,就爲一個簡單的辦法。

ball.getBody().setLinearVelocity(0, 0); 

這完全停止了身體的當前運動。我會開始刪除該行。此外,爲了更好地切合實際行爲,可以按照正確的公式來計算的吸引力,這是這樣的:

force = mass1 * mass2 * [some constant]/(distance^2) 

當你從你的身體向黑洞(計算爲black hole position - body position)的載體中,該矢量的長度爲距離,並且歸一化並且通過所述力相乘後,就得需要被施加到主體的每個更新,只要它保持在孔的範圍內的所需forceXforceY力矢量。

然而此公式將導致作爲身體移動靠近孔的力增長到無窮大,所以你可以嘗試切換到線性轉換(最接近= 1,farest = 0),如果引起任何麻煩。

force = mass1 * mass2 * [some constant] * ((maxDistance - distance)/maxDistance) 
+0

你也可以使用方便的'Body#applyForceToCenter()'方法。 – kajacx 2014-09-20 21:19:22