AS3 - 使用For循环更新数组中的多个点及其值

时间:2014-11-14 01:30:17

标签: actionscript-3 flash actionscript flash-cs6

我对AS3有点新鲜(但不是真正的编码)所以请原谅我的无知。我正在创建一个小函数,该函数将被主函数调用,以更新具有多个点对象(空影片剪辑)的x和y位置的52个指针的位置。然后它还将使用这些值更新两个全局数组(x为一个数组,y为一个数组)。

问题是,因为有52个,并且它们可能会增加数量,我希望能够使用FOR功能来实现它,但我似乎无法做到能够搞清楚。

我收到此错误:访问未定义的属性_point

这是一段梦想的代码:

function happyFunc():void
{
    var avpointers:int = 52;
    var vpointx:Array = new Array();
    var vpointy:Array = new Array();        
    for (aa=0; aa<vpointers; aa++)
    {
        vpointx[aa] = _point[aa].x;
        vpointy[aa] = _point[aa].y;
    }
}

这就是我坚持的代码......

function reallySadFunc():void
{
_point1 = localToGlobal(new Point(point1.x,point1.y));
//...
_point52 = localToGlobal(new Point(point52.x,point1.y));
vpointx[0] = _point1.x;
vpointx[1] = _point2.x;
//...
//oh god there are 104 lines of this why do I have to suffer
}

谢谢!

1 个答案:

答案 0 :(得分:0)

如果我正确地阅读了您的问题,我认为这就是您所需要的:

public static const CLIP_COUNT:int = 52;

// ...

private function happyFunc(parentClip:DisplayObjectContainer):void
{
    var vpointx:Vector.<Number> = new Vector.<Number>(CLIP_COUNT, true);
    var vpointy:Vector.<Number> = new Vector.<Number>(CLIP_COUNT, true);

    var clipPoint:Point = new Point ();
    var globalPoint:Point;

    for (var i:int = 0; i < CLIP_COUNT; i++)
    {
        var childClip:DisplayObject = parentClip.getChildByName("point" + 
            (i + 1).toString());

        clipPoint.x = childClip.x;
        clipPoint.y = childClip.y;

        globalPoint = parentClip.localToGlobal(clipPoint);

        vpointx[i] = globalPoint.x;
        vpointy[i] = globalPoint.y;
    }

    // do something with vpointx and vpointy - they're local variables
    // and will go out of scope unless you declare them as class members
    // or somehow return them from this function.
}

此功能通过获取父显示对象(包含52个影片剪辑的对象 - 可以是Stage)并通过按名称获取每个影片剪辑来迭代它们。该代码假定您的影片剪辑名为point1point2,...,point52

为了加快本地到全局的坐标转换,会创建两个Point对象,然后在for循环期间重用这些对象,以避免创建许多临时Point实例。

不使用Array,而是使用Vector.<Number> - 此类的效果优于Array