确切的元素位置 actionscript3

Posted

技术标签:

【中文标题】确切的元素位置 actionscript3【英文标题】:Exact element position actionscript3 【发布时间】:2017-12-23 07:00:26 【问题描述】:

我在尝试在 AS3 上画线时遇到了一点麻烦。

绘图是一个简单的部分,但棘手的部分是如何获取组件的位置。

我正在尝试设置等级,如果儿子是通过线条连接到父亲的。 我在屏幕上有结构和组件,但是当我尝试在节点之间画一条线时,我找不到儿子的位置。

    public function drawLines():void
                for(var i:int=1; i<= _maxLevel ; i++)
                        var vGroup:*=treeLevel.getElementAt(i);
                        for(var j:int = 1; j<vGroup.numChildren ;j++)
                            var element:* = vGroup.getElementAt(j);
                            trace(element.fatherJoin);//a checkbox for the union
                            trace(element.sonJoin);//another checkbox for the union
                            var coord:* = buscarCoord(element.father,i-1);//with this function I get the father checkbox
                            coord.graphics.lineStyle(3, 0xFF0000, 1 );

//onwards is the fail code, I can't get the correct x and y to draw.
                            var pt:Point = new Point(element.fatherJoin.x,element.fatherJoin.y);
                            pt = this.localToGlobal(pt);
                            coord.graphics.lineTo(pt.x,pt.y);
                        
                
            

元素是通过 addElement 在 vgroup 上设置的,在我看到 x=0 和 y=0 的任何地方。

任何人都知道如何获得正确的坐标。这个元素?

谢谢。

【问题讨论】:

【参考方案1】:

可能你需要的是:

// Create an empty point of (0,0).
var aPoint:Point = new Point;

// Get the global coordinates of the object you want.
aPoint = element.fatherJoin.localToGlobal(aPoint);

// Translate it to the coordinates of your canvas.
aPoint = coord.globalToLocal(aPoint);

// Now draw.
coord.graphics.lineTo(aPoint.x, aPoint.y);

请记住,element.fatherJoincoord 都必须(不一定直接,它们可能是子级的子级)附加到舞台,否则 localToGlobal globalToLocal 不会产生正确的结果。

UPD:我试过了。

var C:Sprite = new Sprite;
var Z:Sprite = new Sprite;

Z.x = 100;
Z.y = 200;

C.x = 300;
C.y = 400;

// Z is not attached to anything.
trace(Z.globalToLocal(new Point));
// output: (x=-100, y=-200)

C.addChild(Z);

// C is not attached to stage.
trace(Z.globalToLocal(new Point));
// output: (x=-400, y=-600)

addChild(C);

// C is attached to stage.
trace(Z.globalToLocal(new Point));
// output: (x=-400, y=-600)

【讨论】:

我已经想到了,但是 localToGlobal 总是得到相同的值 (607,87),当转换为全局时它得到 (0,0)。是的 element 和 coord 都是 children of children 的 children..(我认为这就是为什么我无法获得正确的位置)。附在舞台上。谢谢你的回答。 @Jaime 我更新了我的帖子。您在此过程中获得 (0,0) 的事实可能意味着您的代码在组件初始化、正确放置等之前执行 。 Flex 需要从应用开始的几帧,然后才能正确创建和放置所有内容。

以上是关于确切的元素位置 actionscript3的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在可放置 div 中释放项目的确切位置元素上放置

从 beautifulsoup 元素中提取原始字符串位置

用Javascript获取页面元素的位置

用Javascript获取页面元素的位置

如何获得Button Click上的确切位置

在android中找不到确切的当前位置