Изменить размер Flex / Flash объекта с левой стороны? - PullRequest
1 голос
/ 23 мая 2009

Я работаю над компонентом Flex, размер которого можно изменить с помощью маркеров справа и слева (то есть, если вы щелкнете и перетащите левую сторону, компонент вырастет влево, если вы щелкните и перетащите вправо , будет расти вправо).

Сейчас я использую:

var oldX:Number = this.x;
this.x = event.stageX + (initial.x - initial.stageX); // Move the left edge to the left
this.width += oldX - this.x; // Increase the width to compensate for the move to the left

Но это заставляет правую сторону прыгать вокруг и в целом выглядит некрасиво.

Какое "право" делать это? Есть что-то фундаментальное, что я ошибся?

Спасибо!

Редактировать : Дрожание происходит с правой стороны компонента. Когда я устанавливаю this.x, компонент перемещается влево, экран перерисовывается, затем ширина обновляется, и экран перерисовывается снова.

Ответы [ 3 ]

1 голос
/ 24 мая 2009

Я не специалист по Flex, но я думаю, что ваш джиттер как-то связан с интегрированной средой Flex, использующей Stage.invalidate() или что-то подобное, что вызывает перерисовку во время выполнения фрейма.

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

var dx:Number = // however you're finding this
var m:Matrix = new Matrix();
m.scale( scaleX*(width-dx)/width, scaleY );
m.translate( x+dx, y );
transform.matrix = m;

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

1 голос
/ 17 марта 2010

Была такая же проблема.

Проблема в том, что сцена недостаточно освежается.

Просто добавьте stage.invalidate (); после 2 ваших заданий ...

0 голосов
/ 23 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...