2009-05-25 2 views

ответ

2

Что такое? Если бы мы знали, что такое «а», тогда было бы проще ответить. A.x или a.y будут нормальны определять координаты для верхнего левого угла объекта (например, Button) в его родительском (например, Canvas).

Если 'a' был кнопкой, то установка .x и .y или установка move (x, y) будут делать то же самое.

Проверьте документы: «Перемещает компонент в указанную позицию в своем родителе. Вызов этого метода точно такой же, как установка свойств x и y компонента. '

http://livedocs.adobe.com/flex/3/langref/index.html, это под UIComponent.

1

Просто угадать (я не знаю, ActionScript), но я бы подумал, что

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

установил бы быть (100, 100), в то время как

a.move(100,100); 

добавит (100,100) к текущему значению a. Однако, в свете принятого ответа, похоже, что он делает то же самое. Хотя сохраняется следующая рекомендация:

Вы пробовали последнюю для разных начальных значений (0, 0), (100, 100), (23, 42) и т. Д. И проверили, что происходит?

Если вы не уверены в чем-либо, проверьте это - вы ничего не сломаете, и даже если сначала ошибиться, вы научите вас чему-то.

Я быстро просмотрел документацию, но не смог ничего сделать. Я считаю, что лучше всего создать несколько тестовых примеров для изучения того, что делает каждый подход.

2

В целом: вызов метода связывает то, что вы делаете, просто выбирая переменные-члены, нет.

Как сказал ChrisF, также может быть разница, когда выкалывание перемещается в абсолютные координаты, а вызов метода перемещается относительно текущей позиции. Я попытался найти ссылку, но не нашел ее.

+0

Может быть, но нет ... Разница заключается только в событии «move», которое отправляется после назначения. – Jet

1

Свойства ActionScript на самом деле могут быть подкреплены методами - так называемыми парами getter/setter. Поэтому, когда вы устанавливаете свойство a.x = 100, существует весьма вероятный код, который выполняется, чтобы справиться с последствиями изменения этого свойства. (Не зная, какой тип a здесь, невозможно точно знать - действительно, это никогда не может знать, и вы не должны этого предполагать)

Будьте осторожны: вызывая один метод, такой как.move (x, y) может быть совершенно отличный от вызова двух двух отдельно методы setter за a.x = q и a.y = r Все зависит от того, как реализован класс, который вы используете. По этой причине многие классы фрейма Flex (все?) Используют шаблон invalidateProperties() ... commitProperties(), чтобы гарантировать, что все изменения свойств координируются через единую контрольную точку.

1

Вот случай, когда лучше использовать ход:

При переопределении метода updateDisplayList() в пользовательский компонент, вы должны вызвать метод move() вместо установки x и y properties.The разница в том, что метод move() изменяет местоположение компонента, а затем отправляет событие move при вызове метода, в то время как настройки свойств x и y меняют местоположение компонента и отправляют событие при следующем обновлении экрана.

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: если вы используете другой флэш-компилятор - просто найти его определение класса где-то на машине ...

Смежные вопросы