2012-02-22 2 views
2

(AS3을 통해) 회전 경로를 따라 무비 클립 부착.은 내가 할 수있는 방법

한 번에 하나의 무비 클립을 첨부하는 간격입니다.

나는 회전이 필요합니다. 즉, 발자국은 경로 방향에 따라 회전해야합니다.

감사합니다.

답변

7

1. 좌표 배열을 만듭니다. 이것은 사용자의 경로입니다. 이 어레이를 생성 실제로 접근 할 수있는 여러 가지 방법이 있지만 결과는 다음과 유사합니다 :

var path:Array = [ 
    Point(0, 0), 
    Point(20, 12), 
    Point(60, 72), 
    Point(67, 118) 
]; 


2. 당신의 nextStep() 기능이나 설정과 유사 - 이것은에 대한 정보를 수집합니다 경로와 현재 단계 사이의 각도와 같은 경로의 다음 단계입니다. 또한 현재 단계를 추적해야하며 경로 배열에있는 위치의 색인을 저장하기 만하면됩니다. 전부, 그것은 다음과 같이 보일 수 있습니다 :

var currentStep:int = 0; 

function nextStep():Object 
{ 
    // Object to return. 
    var out:Object = { 
     hasDestination: false, 
     destination: null, 
     radians: 0 
    }; 


    var current:Point = path[currentStep]; 

    // Check that you're not on the last step first. 
    if(currentStep != path.length - 1) 
    { 
     currentStep ++; 

     var next:Point = path[currentStep + 1]; 
     var t:Point = next.subtract(current); 

     out.nextDestination = true; 
     out.destination = next; 
     out.radians = Math.atan2(t.y, t.x); 
    } 

    return out; 
} 



3. 위의 정보를를 이동 - 객체는 당신의 선택의 DisplayObject의 위치와 회전을 변경하는 데 사용할 수 있습니다 nextStep()에서 돌아왔다.

entityDisplayObject이라고 가정 :

var stepInfo:Object = nextStep(); 

if(stepInfo.hasDestination) 
{ 
    entity.rotation = stepInfo.radians * 180/Math.PI; 
    entity.x = stepInfo.destination.x; 
    entity.y = stepInfo.destination.y; 
} 
else trace("End of path reached."); 


4.가 단정 (선택 사항) - tidyness, 예를 들어 nextStep()의 결과로 자신의 클래스를 만드는 고려 : 당신은 단순히 물건을 할 수 있도록 나는 심지어 Path 클래스로 위의 모든 이동 좋을 것

public class StepInfo 
{ 
    public var hasDestination:Boolean = false; 
    public var destination:Point; 
    public var radians:Number = 0; 
} 

같은 :

var path:Path = new Path(); 
path.generate(); // create this yourself, generates the path array. 

var step:StepInfo = path.nextStep(); 

trace(path.currentStep); 

희망이 도움이됩니다.

+2

위대한 답을 얻지 못하면 녹색 확인 결과가 표시되지 않습니다. +1 – danii

1

경로를 (x,y) = f(t)과 같은 t의 수학 함수로 사용해야합니다. 이 경우 새로운 동영상 클립을 (x,y)으로 이동하고 예를 들어 Math.atan2을 사용하여 회전하는 것만 큼 문제가됩니다.

귀하의 경우에는 along a path (other movieclip)의 의미가 명확하지 않습니다. 예를 들어, 정적 또는 동적입니까?

정적 경로가있는 경우이를 수행하는 해킹 방법은이 경로를 따라 100 개의 프레임에 대해 트위닝되는 빈 스프라이트를 사용하는 것입니다. 이러한 방법으로 기능 (x,y) = f(t)

mc.gotoAndStop(int((t-minTime)/(maxTime-minTime))); 
var xToAddFootsteps:Number = mc.dummy.x; 
var yToAddFootsteps:Number = mc.dummy.y; 
var rotationOfFootsteps:Number = Math.atan2(xToAddFootsteps, yToAddFootsteps); 

경로의 무비 클립이 mc라고하며 내부의 빈 스프라이트가 dummy라는 것을 제공 할 것이다.