沿旋转路径附加动画片段(通过AS3)

时间:2012-02-22 18:20:12

标签: actionscript-3

我该怎么做:

沿着路径(其他动画片段)附加动画片段(例如“脚步声”)。

这将在一次附加一个动画片段的时间间隔内。

我需要旋转,即脚步,应根据路径方向旋转。

感谢。

2 个答案:

答案 0 :(得分: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。使用上述信息移动 - 从nextStep()返回的对象可用于更改您选择的DisplayObject的位置和轮换。

假设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。整理(可选) - 考虑创建自己的类,使其成为nextStep()整洁的结果,例如:

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

我甚至建议将上述所有内容移到Path课程中,这样您就可以执行以下操作:

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

var step:StepInfo = path.nextStep();

trace(path.currentStep);

希望这有帮助。

答案 1 :(得分:1)

你必须把你的路径作为(x,y) = f(t)的数学函数。在这种情况下,只需将新的动画片段移动到(x,y)并使用例如Math.atan2旋转它。

在你的情况下,不清楚along a path (other movieclip)的含义。例如,它是静态的还是动态的?

如果你有一个静态路径,这样做的hackish方法是使用一个空的精灵,例如,沿着这条路径补偿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);

如果路径movieclip被称为mc并且内部的空精灵被称为dummy