【问题标题】:AS3 - Using a For Loop to Update Multiple Points and Their Values in an ArrayAS3 - 使用 For 循环更新数组中的多个点及其值
【发布时间】:2015-01-11 08:16:25
【问题描述】:

我对 AS3 有点陌生(但不是真正的编码)所以请原谅我的无知。我正在创建一个小函数,它将由 Main 函数调用以更新 52 个指针的位置,这些指针具有多个点对象(空影片剪辑)的 x 和 y 位置。然后它还将使用这些值更新两个全局数组(一个数组用于 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
}

谢谢!

【问题讨论】:

  • 什么是point1...point52?那些MovieClip是舞台上的对象吗?
  • 它们是表示位置的 Point 对象。在我的代码中,它们是点 1 到点 52 的全局坐标,它们是舞台上 MovieClipt 中的 MovieClip。有关积分的更多信息:help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/…
  • 这些积分是怎么来的?它们不能在舞台上,所以你必须以某种方式创造它们。
  • 我通过在舞台上放置一个空的影片剪辑来添加它们。 (例如,按 Ctrl+F8 并且不执行任何操作),然后命名为“point1”(实例名称)
  • 啊,好吧,他们不是Point-s,他们是MovieClip-s。

标签: actionscript-3 flash actionscript flash-cs6


【解决方案1】:

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

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.&lt;Number&gt; - 这个类比Array 有更好的性能。

【讨论】:

  • @JohnSchwimmer 不客气。如果这有帮助,请点赞并接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
相关资源
最近更新 更多