2010-11-28 6 views
0

역 순환 모션과 관련된 쿼리가 있습니다. 아래 코드가 있습니다. 케이스 1은 시계 방향의 원 운동이고 케이스 2는 시계 반대 방향입니다. 케이스 1과 케이스 2 사이의 전환은 사용자 터치로 수행됩니다. 시계 방향에서 반 시계 방향으로 전환 할 때 sin() 및 cos()은 타이머/1.5입니다. 이렇게하면 내 행성의 다른 위치에서 반 시계 방향 동작이 시작됩니다. 반 시계 방향 동작이 시계 방향 동작 중에 중단 된 위치에서 시작하여 부드러운 전환을 갖기 위해 내 타이머에 필요한 값을 계산하고 싶습니다. 누군가 내 마음이 막히는 것처럼 정확한 수학을 알고 있습니까? 감사합니다역 원형 모션

아래의 코드에 대한 간단한 설명은 행성의 x 좌표와 y 좌표를 가져 와서 행성 반경 + 55의 반경으로 원 운동을 수행하여 로봇의 위치를 ​​계산하는 것입니다. 내 스프라이트의 편안한 높이).

 case 1: 

     positionX = AttachedPlanet.positionX + sin(timer/1.5)*(AttachedPlanet.planetRadius + 55); 
     positionY = AttachedPlanet.positionY + cos(timer/1.5)*(AttachedPlanet.planetRadius + 55); 
     timer = timer + 0.02; 

     break; 
    case 2: 



     positionX = AttachedPlanet.positionX + cos(timer/1.5)*(AttachedPlanet.planetRadius + 55); 
     positionY = AttachedPlanet.positionY + sin(timer/1.5)*(AttachedPlanet.planetRadius + 55); 
     timer = timer + 0.02; 

답변

5

동일한 기능을 유지하고 타이머를 감소시키지 않는 이유는 무엇입니까? 총 시간에 대한 측정이 필요하면 항상 올라가는 두 번째 타이머를 유지하십시오.

+0

오, 소년 - 내가 어떻게 그리워 했니? 답장을 보내 주셔서 감사합니다! 나는 내 머리가 고리에 갇혔다 고 생각한다. D. 동일한 기능을 사용하고 타이머를 추가하기로 결정했습니다. 건배. – STDE

2

방향을 전환하려면 sin/cos 결과를 빼야합니다. 그래서 뭔가 같은

dir = +1; //initialization 

if (switchDirection) //event handling 
    dir *= -1; 

//calculation 
positionX = AttachedPlanet.positionX + dir*cos(timer/1.5)*(AttachedPlanet.planetRadius + 55); 
positionY = AttachedPlanet.positionY + dir*sin(timer/1.5)*(AttachedPlanet.planetRadius + 55);