Форум Flasher.ru

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

WarShumer 14.12.2012 03:37

Проблема при масштабировании компонента с внутренними компонентами
 
Вообщем, есть главное окно в него добавляется компонент, в котором есть фон и кнопки. фон и кнопки представляют собой images с графикой..

В главном окне при Resize вычисляю параметры scaleX, scaleY и задаю их соответствующим свойстам основного компонента.

Итог. размер окна компонента и всех его кнопок изменяется в соответствии с установленными ScaleX, ScaleY. Но вот беда. кнопки внутри компонента смещаются на 0 - 2 пикселя по всем сторонам по каким-то своим законам. Получается что кнопки внутри панели уже не стоят на своих местах, а есть некрасивые полосы сдвигов.

При ScaleX = 1 и ScaleY = 1 никаких проблем снова нет. Подскажите плиз решение. Поиски по форуму не увенчались успехом.

Есть вариант места кнопок частично заполнить фоном кнопок и тогда заметно ничего не будет. но можно ли просто правильно позиционировать и масштабировать объекты внутри компонента. Спасибо!

NAO111 14.12.2012 10:53

А объект масштабируешь пропорционально? Возможно в этом и есть проблема.

Korchy 14.12.2012 11:48

Координаты задаются как Number? Если да - попробуйте округлять до кратного 0.25 или для простоты задать в целых числах.

WarShumer 14.12.2012 23:36

координаты width и height неизменны, меняются только scaleX scaleY. Внутренние объекты вообще не трогаю. масштаюируются вместе с компонентом;
координаты внутренних кнопок задаются целым числом.

Добавлено через 1 минуту
да, объект масштабируется пропорционально по одной стороне.

Добавлено через 6 минут
Код AS1/AS2:

                                var varScaleX:Number;
                                var varScaleY:Number;
                                varScaleX = stage.stageWidth / bcPanel.width;
                                varScaleY = stage.stageHeight / bcPanel.height;
                                if (varScaleX > varScaleY) {
                                        varScale = varScaleY;
                                } else {
                                        varScale = varScaleX;
                                }
                                bcPanel.scaleX = varScale;
                                bcPanel.scaleY = varScale;
                                sx = int((stage.stageWidth - bcPanel.width * varScale) /2);
                                sy = int((stage.stageHeight - bcPanel.height * varScale) /2);
                                bcPanel.x = sx;
                                bcPanel.y = sy;



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

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