(AS3을 통해) 회전 경로를 따라 무비 클립 부착.은 내가 할 수있는 방법
한 번에 하나의 무비 클립을 첨부하는 간격입니다.
나는 회전이 필요합니다. 즉, 발자국은 경로 방향에 따라 회전해야합니다.
감사합니다.
(AS3을 통해) 회전 경로를 따라 무비 클립 부착.은 내가 할 수있는 방법
한 번에 하나의 무비 클립을 첨부하는 간격입니다.
나는 회전이 필요합니다. 즉, 발자국은 경로 방향에 따라 회전해야합니다.
감사합니다.
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()
에서 돌아왔다.
entity
이 DisplayObject
이라고 가정 :
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);
등
희망이 도움이됩니다.
경로를 (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
라는 것을 제공 할 것이다.
위대한 답을 얻지 못하면 녹색 확인 결과가 표시되지 않습니다. +1 – danii