使用
之间有什么区别a.x = 100;
a.y = 100;
和
a.move(100,100);
在actionscript 3 / Flex?
最好的问候,
阿尔乔姆
答案 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()
方法,而不是设置x
和y
属性。不同之处在于move()
方法更改了组件的位置,然后在调用方法时调度move
事件,同时设置x
和y
属性会更改组件的位置并在下一次屏幕刷新时调度该事件。
答案 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编译器 - 只需在你机器的某个地方找到它的类定义......