【问题标题】:(AS3) MovieClip' s motion path as Shape on stage(AS3) MovieClip 的运动路径为舞台上的 Shape
【发布时间】:2015-03-06 12:36:46
【问题描述】:

我正在为一个学校项目制作游戏。这个概念很简单,你需要修复电路线(矩形形式的路径),以便电流可以通过电路并点亮灯泡。

我正在尝试找到一种方法来让影片剪辑通过电线。我看过很多教程,它们说明了运动路径的坐标和角度,但我想这样做,以便影片剪辑将自动遵循舞台上存在的形状路径,因此即使路径发生变化(对于不同的级别),影片剪辑仍将遵循该路径。目前,我所能做的就是在影片剪辑中创建一个预定义的引导路径来跟踪路径。

后续问题: 还有一种方法可以检测形状路径是否完整?系统将检查电线是否相互连接。

【问题讨论】:

    标签: actionscript-3 flash


    【解决方案1】:

    你应该在移动你想要移动的东西之前进行元数据计算,这样你首先计算你的谜题是否已经解决,一旦它解决了,或者一旦你确定了你的可移动对象应该停止并显示错误的点,然后你用简单的部分制作一条路径,然后让你的对象一个接一个地移动,直到最后一点,然后显示结果。这是一般的想法。按部分移动对象的简单代码如下所示:

    var sections:Vector.<Point>; // we need x&y sequence. Fill this prior to launching the routine
    var position:int=0; // where are we now
    var velocity:int=8; // pixels per frame, adjust as needed
    movable.addEventListener(Event.ENTER_FRAME,moveABit);
    function moveABit(e:Event):void {
        var nextPoint:Point=sections[position];
        var do:DisplayObject=e.target as DisplayObject; // what we are moving
        var here:Point=new Point(do.x,do.y);
        if (Point.distance(here,nextPoint)<velocity) {
            // this means we are too close to interpolate, just place
            do.x=nextPoint.x;
            do.y=nextPoint.y;
            position++;
            if (position>=sections.length) {
                // movement finished
                // TODO make your final animation
                do.removeEventListener(Event.ENTER_FRAME,moveABit); // stop moving
            }
        } else {
            // interpolate movement
            var angle:Number=Math.atan2(nextPoint.y-here.y,nextPoint.x-here.x);
            do.x+=Math.cos(angle)*velocity;
            do.y+=Math.sin(angle)*velocity; 
            // if the object will move to wrong direction, fix this code!
        }
    }
    

    【讨论】:

    • 谢谢!我希望系统可以自动检测形状路径并在其上行驶,但我想我必须手动告诉它路径在哪里以及在哪里转弯。
    【解决方案2】:

    如果您想查看您的“形状”是否完整: 您可以创建一个布尔变量向量(每个变量都表示您的电线的一个节点 - 您在连接时将变量设置为 true),并且您需要一个函数来检查向量中的所有变量是否为 true(带循环),即意味着你的形状是完整的。希望这个想法有帮助!

    【讨论】:

    • 感谢您的评论!你能告诉我你的意思的示例代码吗?因为我明白了逻辑,只是我想不出我将如何将其放入代码中。另外,我在这方面有点初学者,所以 Vector 对我来说是一个新事物(据我了解,它是一种更好的数组形式)。
    猜你喜欢
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2015-07-11
    • 1970-01-01
    相关资源
    最近更新 更多