我对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
}
谢谢!
答案 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
)并通过按名称获取每个影片剪辑来迭代它们。该代码假定您的影片剪辑名为point1
,point2
,...,point52
。
为了加快本地到全局的坐标转换,会创建两个Point
对象,然后在for
循环期间重用这些对象,以避免创建许多临时Point
实例。
不使用Array
,而是使用Vector.<Number>
- 此类的效果优于Array
。