Форум 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=183677)

koljsch 29.08.2012 05:49

Пропорции объектов
 
Здравствуйте дорогие форумчанины!
У меня собственно вопрос:имею два объекта(обычная графика и UILoader), изначально допустим объект графики имеет координаты x-100 и y-100, а объект UILoader находится поверх него и имеет координаты x-150 и y-150.
Я увеличиваю эти два объекта в n-раз(допустим в 4 раза), изменяя width и height, как мне сохранить пропорции объектов при увеличение(т.е. их координаты).
Попробую объяснить, т.е. после увеличения объект UILoader должен лежать также зрительно как и был до увеличения.
У меня получается, что если объект UILoader поместить в левый край объекта графики, то он отображается нормально, если вправо, то сдвигается влево и такие же проблемы везде.
Как исправить, как можно сохранять пропорции в координатах при увеличение?

Korchy 29.08.2012 12:21

Точка привязки спрайта - левый верхний угол. Масштаб соответственно делается относительно него. Масштаб относительно другой точки привязки обычно делается через матрицы трансформации путем перемещения объекта нужной точкой в 0,0, масштабирования, и перемещения объекта нужной точкой обратно.

Wolsh 29.08.2012 12:25

Цитата:

как мне сохранить пропорции объектов при увеличение(т.е. их координаты).
Масштабировать надо систему координат, а не объекты. Вы когда фотку уменьшаете, тоже отдельно глаза, нос и рот? Или все же всю систему целиком? Так и здесь. Масштабируйте контейнер с этими объектами.

zerAlex2 29.08.2012 14:27

Попробуйте GreenShok plugins, там много интересного по этой теме.

Hauts 29.08.2012 16:19

zerAlex2, "greensock" ("зеленый носок")

koljsch 29.08.2012 17:20

Wolsh, все по отдельности. А можно как-то все добавить в контейнер?

spirit2 29.08.2012 19:57

Выровняйте содержимое каждого объекта относительно центра. Точка привязки центр.
После
Код AS3:

object1.scaleX = object1.scaleY = 4;

уже должны как вы хотите объекты увеличиваться.

Но если объектов несколько, а операция одна, то конечно проще:
Код AS3:

var container:Sprite = new Sprite();
addChild(container);
container.addChild(object1);
container.addChild(object2);
container.scaleX = container.scaleY = 4;


Wolsh 29.08.2012 20:52

Цитата:

уже должны как вы хотите объекты увеличиваться.
Объекты то увеличатся, без проблем. Расстояние между ними останется прежним. Хоть от центра, хоть от топлефта, какая разница? Расстояние то одно))
Вот второй код, с контейнером, верно.
Ну можно и без контейнера расстояние умножить на скейл.

koljsch 30.08.2012 19:48

Не работает, он увеличивает область у container, но все, что у него добавлено так и остается как было

Wolsh 30.08.2012 20:34

Область у контейнера, да? :) Всё чудесатее и чудесатее....

Добавлено через 4 минуты
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
        public class Main extends Sprite
        {
                private var _container:Sprite;
                private var _isScaled:Boolean = false;
 
                public function Main():void
                {
                        _container = new Sprite();
                        this.addChild(_container);
                        var child1:Sprite = new Sprite();
                        child1.graphics.beginFill(0x000000);
                        child1.graphics.drawRect(0, 0, 100, 100);
                        _container.addChild(child1);
 
                        var child2:Sprite = new Sprite();
                        child2.graphics.beginFill(0x004400);
                        child2.graphics.drawRect(0, 0, 100, 100);
                        _container.addChild(child2);
                        child2.x = child2.y = 40;
 
                        _container.addEventListener(MouseEvent.CLICK, clickHandler);
                }
 
                private function clickHandler(event:MouseEvent):void
                {
                        _container.scaleX = _container.scaleY = _isScaled ? 1 : 4;
                        _isScaled = ! _isScaled;
                }
        }
}



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

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