PDA

Просмотр полной версии : Пропорции объектов


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
Выровняйте содержимое каждого объекта относительно центра. Точка привязки центр.
После
object1.scaleX = object1.scaleY = 4;
уже должны как вы хотите объекты увеличиваться.

Но если объектов несколько, а операция одна, то конечно проще:
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 минуты
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;
}
}
}