(AS3)MovieClip的动作路径为舞台上的Shape

时间:2015-03-06 12:36:46

标签: actionscript-3 flash

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

我正试图找到一种方法,让你可以让电影剪辑穿越电线。我已经看过很多教程,他们说明了运动路径的坐标和角度,但我想让它成为影片剪辑将自动跟随舞台上的形状路径,所以即使路径发生变化(针对不同的级别),影片剪辑仍然会遵循该路径。目前,我所能做的就是在影片剪辑中创建一个预定义的引导路径,跟踪路径。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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!
    }
}