2012-11-08 2 views
0

저는 AS2를 사용하고 있으며 사람이 동적으로 구축 할 수있는 열차가 있습니다. 사용자가 스테이지의 객체를 클릭하면 복제본이 만들어집니다. 사용자가 클릭하여 다른 객체로 드래그하면 대상 객체의 오른쪽으로 스냅되고 현재는 배열이 생성되거나 추가됩니다. 그래서 사용자는 기본적으로 자동차의 양 (또는 원하는 경우 자녀)과 함께 기차를 만들 수 있습니다.mc의 자식을 어떻게 정렬하여 같은 방향을 향하게할까요?

내가 추가 한 기능 중 하나는 사용자가 부모를 클릭하여 놓을 때 변경되며 _x_y 좌표에는 변경 사항이 없으므로 전체 열차가 줄을 알고 새 방향을 가리 킵니다. 그래서 그들은 모두 줄 지어 3시 위치를 가리키고 사용자가 부모를 클릭하면 부모는 6시 위치를 가리키고 아이들은 모두 12시와 모든 지점까지 줄을 서게됩니다 6 시까 지. 사용자가 계속 클릭하면 전체 열차가 계속 회전합니다.

function rotate(_index,_angle):Void 
{ 
    for(var _i in _linkArray[_index]) 
    { 
     var _mcy:Number = this[_linkArray[_index][_i]]._y; 
     var _mcx:Number = this[_linkArray[_index][_i]]._x; 
     var _degree:Number = Math.atan2(_mcy,_mcx)*(180/Math.PI) + _angle; 
     /* if not the first element line up and rotate */ 
     if(_i != 0) 
     { 
      this[_linkArra[_index][_i]._rotation += _degree; 
     } 
    } 
} 

이 희망 충분한 정보가있다 : 여기

내가 (잘하면 충분)와 함께 일하고 있어요 코드입니다.

편집

내가 노력하고 내가 달성하기 위해 노력하고있어 명확히하고 싶었다. 나는 모범이 없지만 더 잘 설명합니다. "railcar"라는 라이브러리에있는 영화 클립이 있습니다. SWF가 시작되면 "railcar"가 스테이지에 연결되고 해당 객체가 현재 무한대의 복제본을 만드는 마스터가됩니다. 궁극적 인 목표는 사용자가 이러한 복제물을 사용하여 교육 지원을위한 열차를 만드는 것입니다. 따라서 사용자가 열차를 만들기 시작하면 복제본을 가져 와서 다른 객체 위에 드래그 앤 드롭하여 두 객체를 연결합니다. 사용자는이 작업을 수행하여 원하는만큼 열차를 만들 수 있습니다.

모든 자동차와 같은 각각의 부모 개체의 오른쪽에 적재 될 기차를 구축 그래서 (화살표는 방향을 표시하고 각 O 기차의 단일 자동차 표시)

ooo-> 

을 사용자가 전체 기차가 다른 직접에 지점으로 회전하도록되어 처음으로 자동차를 클릭, 여기 예제 :

^ 
o 
o 
o 

전면 차가 다시 클릭하면 그것은 다시 회전합니다 :

<-oooo 

기차가 모두 줄 지어 있고 3'oclock 위치를 가리키며 9시 위치를 가리 키도록하려는 경우 앞차를 두 번 클릭합니다 (각 회전 이후로) 90도)이고 전체 열차가 그 방향으로 회전하여 선행 차량을 가리 킵니다.

은 내가 예를 HD 좋겠지 만, 그래서 희망이 도움이 :) 그래서

+0

달성하려는 작업을 이해하는 데 어려움이 있습니다. 다이어그램이나 실물 모형이 도움이 될까요? – BadFeelingAboutThis

+0

안녕 런던, 문제 없습니다.나는 회의에 가고 조금 돌진했다. 편집을 찾으십시오. – Mike

답변

0

당신이 항목에 각도를 근거로하는 경우 I는하지 않습니다 '0', 그 주위에 유지 아닙니다. 루프를 진행하면서 현재 항목 'i'를 계속 사용하고 있습니다. 루프 외부에서 각도 계산을 이동하고 0으로 지정하십시오. 또한 자동차의 x 및 y 포인트를 조정해야하지만 방향에 따라 달라집니다.

function rotate(_index,_angle):Void { 
    var _mcy:Number = this[_linkArray[_index][0]]._y; 
    var _mcx:Number = this[_linkArray[_index][0]]._x; 
    var _degree:Number = Math.atan2(_mcy,_mcx)*(180/Math.PI) + _angle; 

    for(var _i in _linkArray[_index]) { 
     /* if not the first element line up and rotate */ 
     if(_i != 0) { 
      this[_linkArra[_index][_i]._rotation += _degree; 
      // hypothetical hook code for a sprite attached to the car 
      this[_linkArra[_index][_i]._x = this[_linkArra[_index][_i-1].hook._x; 
      this[_linkArra[_index][_i]._y = this[_linkArra[_index][_i-1].hook._y; 
     } 
    } 
} 
+0

안녕하세요. 시간 내 주셔서 감사합니다. 모든 차량이 이제 회전 할 것이지만, 동일한 방향으로 선두 차량 뒤의 단일 파일 라인에서 위치를 변경하지 않습니다. 그들은 항상 리드 카 오른쪽으로 쌓여 있습니다. – Mike

+0

그건 내가 말한거야. 자동차의 새로운 x, y 위치를 계산해야합니다. 기본적으로 이전 차의 연결 지점을 결정하고 새 차를 설정합니다. 그러나 포지셔닝은 까다로울 수 있으며 코드없이이 작업을 단순화하는 데는 여러 가지 방법이 있습니다. 작은 1x1 픽셀 스프라이트를 각 차 객체의 끝에 차의 자식으로 추가하고이를 연결 지점으로 사용합니다. 각 차량의 중심이 중앙의 정면에 위치하는 한, 이전 차량의 '후크'위치를 현재 차량의 위치에 할당 할 수 있으며 모든 것이 선으로 떨어집니다. – Gone3d

+0

여분의 스프라이트를 추가하지 않고도 작업 할 수있는 시간을 미리 알면 후크 포인트 속성을 자동차에 지정할 수 있습니다. 어려운 방법은 회전을 기준으로 새 x, y 점을 계산하는 것입니다. 간단하게. 행운을 빕니다! – Gone3d

관련 문제