a.x = 100之间的区别是什么? a.y = 100和a.move(100,100)?

时间:2009-05-25 14:55:14

标签: flex actionscript-3

使用

之间有什么区别
a.x = 100;
a.y = 100;

a.move(100,100);

在actionscript 3 / Flex?

最好的问候,
阿尔乔姆

6 个答案:

答案 0 :(得分:2)

一般情况下:调用方法会传达你正在做的事情,而只是调用成员变量。

正如ChrisF所说,戳戳移动到绝对坐标时可能存在差异,而方法调用相对于当前位置移动。我试着找一个参考,但没找到一个。

答案 1 :(得分:2)

什么是? 如果我们知道'a'是什么,那么它将使回答更简单。 a.x或a.y将在其父级(比如Canvas)中正常指定对象左上角的坐标(比如Button)。

如果'a'是一个Button,那么设置.x和.y或设置move(x,y)将会做同样的事情。

检查文档'将组件移动到其父级中的指定位置。调用此方法与设置组件的x和y属性完全相同。 “

http://livedocs.adobe.com/flex/3/langref/index.html,它在UIComponent下。

答案 2 :(得分:1)

猜测(我不知道动作脚本),但我会想到

a.x = 100;
a.y = 100;

将a设置为(100,100),而

a.move(100,100);

会将(100,100)添加到a的当前值。但是,根据公认的答案,它似乎也是如此。虽然以下建议仍然存在:

你是否尝试过后者用于(0,0),(100,100),(23,42)等的不同初始值并检查会发生什么?

如果你不确定测试它的东西 - 你不会破坏任何东西,它甚至可以在第一时间弄错它可以教你一些东西。

我快速搜索了一些文档,但无法解决任何问题。我认为最好的办法是生成一些测试示例,以探索每种方法的作用。

答案 3 :(得分:1)

ActionScript属性实际上可以由方法支持 - 所谓的getter / setter对。因此,当您设置属性a.x = 100时,很可能正在执行的代码处理该属性更改的含义。 (不知道这里的类型是什么,不可能确切知道 - 事实上,一般来说永远不会知道,你不应该认为你这样做了)

这里要注意一件事:调用单个方法,例如a.move(x,y)可能与调用两个完全不同在ax = q和ay = r之后单独的 setter方法 这一切都取决于你正在使用的课程是如何实现的。出于这个原因,许多Flex框架类(全部?)使用invalidateProperties()... commitProperties()模式来确保通过单个控制点协调所有属性更改。

答案 4 :(得分:1)

以下是使用move更好的情况:

如果要覆盖自定义组件中的updateDisplayList()方法,则应调用move()方法,而不是设置xy属性。不同之处在于move()方法更改了组件的位置,然后在调用方法时调度move事件,同时设置xy属性会更改组件的位置并在下一次屏幕刷新时调度该事件。

答案 5 :(得分:0)

[WINDOWS_USER_PROFILE_PATH]\Local Settings\Application Data\Adobe\Flash[version]\en\Configuration\Classes

总是看这里确切地知道。如果您的意思是UIControl,请查看[PATH_ABOVE]\mx\core\UIObject.as

你会看到差异:

function move(x:Number, y:Number, noEvent:Boolean):Void
{
    //trace("UIObject.move " + this + " -> (" + x + ", " + y + ")");
    var oldX:Number = _x;
    var oldY:Number = _y;

    _x = x;
    _y = y;

    if (noEvent != true)
    {
        dispatchEvent({type:"move", oldX:oldX, oldY:oldY});
    }
}

所以,正确答案是:在分配新坐标后,此方法将调度由旧坐标提供的“移动”事件。就是这样。

PS:如果你使用另一个flash编译器 - 只需在你机器的某个地方找到它的类定义......