2011-12-31 4 views
2

나는 비행 화살표의 시뮬레이션을 만들고 있지만 매우 자연스럽지 않습니다. 여기 화살표의 궤도

는 스크린 샷입니다 :

enter image description here

화살표 동영상 클립의 앵커는 당신이 볼 수있는 것처럼 화살표의 전면에있다,하지만 난 중간에 교체하는 경우, 그것은 여전히 ​​보이지 않는다 완벽한, 누군가는 이것 같이 어떤 경험이 있는가?

//... 
//'math' isn't the default 'Math' class, it calculates some physics stuff. 

private function updateArrow() 
     { 
      var y0:Number = 50; 
      var v:Number = 100; 
      var angle:Number = math.getRadians(45); 

      if(!arrowstartposition) 
      { 
       arrowstartposition = activearrow.x; 
       arrowdistance = math.calcDistance(y0,v,angle); 
      } 

      var currentdistance:Number = Math.abs(activearrow.x - arrowstart); 

      if(currentdistance <= arrowdistance) 
      { 
       var currentvelocity:Number = math.calcVelocity(currentdistance, v, angle); 
       var addvalue:int = 1; //Math.round(currentvelocity/4); 

       activearrow.x += addvalue; 
       currentdistance += addvalue; 

       var arrowheight:Number = math.calcHeight(currentdistance,y0,v,angle); 
       var vx:Number = v * Math.cos(angle); 
       var vy:Number = - (v * Math.sin(angle) - 9.81 * (currentdistance/arrowdistance) * math.calcTimeOfFlight(y0, v, angle)); 
       var currentangle:Number = Math.atan2(vy,vx); 

       activearrow.y = y0 - arrowheight; 
       activearrow.rotation = math.getDegrees(currentangle); 
      } 
      else 
      { 
       arrowstart = undefined; 
       arrowdistance = undefined; 
       activearrow = null; 
      } 
     } 
+1

하나의 문제는 궤도가 너무 포물선 적이라는 것입니다. 올바른 궤도는 화살표의 각 부분에 대한 벡터를 사용하여 더 잘 모델링됩니다. 머리와 단단한 나무는 중력과 약간의 바람 저항을 경험할 것이고, 샤프트의 영향은 거의 무시할 수 있으며, 플레칭은 약간의 양력을 경험할 것입니다. 따라서 9.81을 기반으로 한 간단한 포물선은 정확하게 모델링하지 못합니다. 또한, 당신은 속도의 연속 함수 인 끌기가 있습니다. – drharris

+0

@drharris 그러나 가장 완벽한 물리적 포물선이라 할지라도 커브의 모양이 가장 자연스럽게 보일 것입니다. – corsiKa

+0

사실 물론, 그는 시뮬레이션을하고 있다고 주장했다. 시뮬레이션은 일반적으로 정확도를 위에 올려 놓습니다. – drharris

답변

2

내가 무게 중심이 꺼져 생각 :

여기 너무 내 코드입니다. 화살촉은 중력의 중심이 화살표의 위치가 될 수 없습니다. 그렇지 않으면 아주 잘 날지 못한다. 화살표의 무게 중심은 비행 포물선에 접하게됩니다. 그래서 그것은 그 무게 중심을 중심으로 회전 할 것입니다. 화살표의 중심쪽으로 더 이동하면 더 자연스러워 보일 것입니다. 아직도 문제가 있다면. 돌을 던져보고 자연스럽게 보이도록 노력하십시오. 그런 다음 화살표에 다시 추가하십시오. 그것이 돌처럼 보이면, 동작이 정확하다는 것을 알고있는 화살처럼 나 빠지고 화살표는 꺼져 있습니다.

+0

나는 그것을 '돌'로 바 꾸었습니다. 속도에 문제가있는 것 같습니다. 각 프레임에 상수 값을 추가합니까? 가로 도끼가 시간 단위를 나타내거나 현재 속도를 기준으로 값을 추가합니까? (예 :'currentvelocity/4') –

+1

더 자연스러운 움직임을 원한다면 가속과 감속을 원할 것입니다. 일정한 속도를 사용하는 대신 시간이 지남에 따라 속도를 변경하고 싶을 것입니다. 화살표가 위로 올라감에 따라 중력에 의해 점점 더 영향을 받아 포물선의 높이에 이르면 방향이 바뀌고 다시 지구로 떨어집니다. 그래서 게이트에서 매우 빠른 Vy0을 원할 것입니다. 각 프레임에서 프레임 속도 단위가 프레임/초이기 때문에 -9.81m/s^2/프레임 속도를 추가 할 것입니다. 수평축은 X 방향이고 수직축은 Y 방향입니다. -9.81은 솔리드 오브젝트에 부딪 힐 때 Y 방향 멈춤에 영향을줍니다. – chubbsondubs

+0

Vy = Vy0; // 초기 속도 Vx = Vx0; // 또한 sinθ/sinθ에서 시작하여 θ가 시작 각도 인 곳에서 계산됩니다. (stillInAir) { Vy = Vy - 9.8/frameRate; Vx = Vx + windSpeed; } – chubbsondubs

관련 문제