2014-09-19 5 views
1

센서 인 원 본체에 보텍스 효과를 만들려고합니다. 나는 이것을 찾고 있었고 내가 찾는 모든 예제는 C++ 또는 Objective C에 있으며 잘 번역하지 못했다.소용돌이/와류 효과를 만드는 방법은 무엇입니까?

내 객체가 콜리 션 될 때 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

이 그 소용돌이의 중심쪽으로 증가한다.

여기에 몇 가지 의사 코드가 있습니다. 물체가 가까이 이동함에 따라 증가하는 반경 (FR)과 접선 (FT) 힘이 있어야 소용돌이 효과를 만드는

Radial and tangential components.

: 여기

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); 

} 

이 벡터 요소를 표시 이미지의 센터.

0

"스핀"을 사용하면 떨어지는 물체가 커브 나 나선을 따라 움직이는 것이 아니라 블랙홀쪽으로 곧바로 이동 방향을 변경하는 것이 쉬운 방법입니다.

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

이렇게하면 신체의 현재 움직임이 완전히 멈 춥니 다. 나는 그 선을 제거함으로써 시작할 것입니다. 또한,보다 현실적인 행동, 당신은 이런 식으로 뭔가를 이동하는 인력을 계산하기 위해 적절한 공식을 따를 수 :

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

당신이 (black hole position - body position로 계산) 블랙홀을 향해 몸에서 벡터를 가지고는 벡터의 길이는 거리이며, 정규화 및 힘에 의한 곱하기 후에 구멍의 범위에 머물러있는 한 각각의 업데이트에 적용 할 필요가있는 원하는 벡터가 forceXforceY입니다.

그러나이 공식을 사용하면 몸체가 구멍에 더 가깝게 이동할 때 힘이 무한대로 증가하므로 문제가 발생하면 선형 변환 (closest = 1, farest = 0)으로 변경해보십시오.

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

편리한 'Body # applyForceToCenter()'메소드를 사용할 수도 있습니다. – kajacx