Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   При повороте клипа на 90 высота меняется на ширину (http://www.flasher.ru/forum/showthread.php?t=172445)

Alexmody 09.12.2011 20:24

При повороте клипа на 90 высота меняется на ширину
 
Код AS3:

clip.rotation = 90;

Почему после вышеуказанной строчки кода, если у клипа (прямоугольника) увеличивать значение height (clip.height = 500) , то визуально это будет смотреться, как увеличение ширины (по горизонтали) объекта.
Но мне надо чтобы при любом повороте, увеличивая height, визуально объект увеличивался по вертикали. Т.к. как это и сделано в FlashIDE, когда в свойствах регулируется высота.

wvxvw 09.12.2011 20:26

Используйте DisplayObject.transform.matrix - немного сложнее, зато таких вот глюков не будет.

goodguy 09.12.2011 20:40

Цитата:

зато таких вот глюков не будет.
А где глюк то? Это абсолютно нормальное поведения объекта. Вместе с поворотом объекта повернется и его внутренняя система координат, и ширина и высоба объекта по прежнему будут считаться относительно x и y осей соответстывенно, а учитывая, что после поворота системы координат на 90 градусов, ось x будет направлена вертикально, ничего удивительного в происходящем нет.
Собственно, матрица тут тоже самое будет делать.

crazyone 09.12.2011 20:49

goodguy, нет, там у height и width глюк правда есть. Если использовать и вращение и высоту/ширину - поведение будет не очевидным и не предсказуемым.

Поэтому нужно юзать матрицы. scaleX и scaleY останутся предсказуемыми, но с ними не так удобно работать при более-менее сложных трансформациях.

goodguy 09.12.2011 20:53

Цитата:

goodguy, нет, там у height и width глюк правда есть.
Странно. Первый раз отсюда об этом узнаю. Ок, а в чем тогда непредсказуемость?

wvxvw 09.12.2011 20:55

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

crazyone 09.12.2011 20:59

Не помню точно детали и специфику, но выполнив, например, вот этот код, в наличии глюков сомневаться перестаешь:
Код AS3:

var s:Shape = new Shape();
                        s.graphics.beginFill(0xff0000, 1);
                        s.graphics.drawRoundRect( 0, 0, 200, 100, 10);
                        s.graphics.endFill();
 
                        s.x = 200;
                        s.rotation = 90;
                        s.height = 20; // если удалить эту строчку, внешний вид будет совсем другим.
                        s.height = 200;
                        addChild(s);


goodguy 09.12.2011 21:01

Цитата:

Сообщение от wvxvw (Сообщение 1050636)
Глюк заключается в том, что после поворота то ли высоту то ли ширину уже никак не поменять, или изменение приведет к симметричному изменению другого параметра... вобщем, используя только высоту и ширину не получится задать нужные размеры.

Точно. Только что проверил. Симметрично объект вырос )

Alexmody 09.12.2011 21:42

Код AS3:

visual.transform.matrix.scale(2, 1);

После того, как я изменил матрицу у клипа, какую нужно вызвать ф-ю, чтобы графический клип visual изменился (промасштабировался по оси X), а то сейчас ни каких изменений?

silin 09.12.2011 22:05

нельзя напрямую изменить matrix, только через установку новой
Код AS3:

var mtrx:Matrix = visual.transform.matrix;
mtrx.scale(2, 1);
visual.transform.matrix = mtrx;



Часовой пояс GMT +4, время: 01:40.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.