Просмотр полной версии : Пропорции объектов
Здравствуйте дорогие форумчанины!
У меня собственно вопрос:имею два объекта(обычная графика и UILoader), изначально допустим объект графики имеет координаты x-100 и y-100, а объект UILoader находится поверх него и имеет координаты x-150 и y-150.
Я увеличиваю эти два объекта в n-раз(допустим в 4 раза), изменяя width и height, как мне сохранить пропорции объектов при увеличение(т.е. их координаты).
Попробую объяснить, т.е. после увеличения объект UILoader должен лежать также зрительно как и был до увеличения.
У меня получается, что если объект UILoader поместить в левый край объекта графики, то он отображается нормально, если вправо, то сдвигается влево и такие же проблемы везде.
Как исправить, как можно сохранять пропорции в координатах при увеличение?
Точка привязки спрайта - левый верхний угол. Масштаб соответственно делается относительно него. Масштаб относительно другой точки привязки обычно делается через матрицы трансформации путем перемещения объекта нужной точкой в 0,0, масштабирования, и перемещения объекта нужной точкой обратно.
как мне сохранить пропорции объектов при увеличение(т.е. их координаты).Масштабировать надо систему координат, а не объекты. Вы когда фотку уменьшаете, тоже отдельно глаза, нос и рот? Или все же всю систему целиком? Так и здесь. Масштабируйте контейнер с этими объектами.
zerAlex2
29.08.2012, 14:27
Попробуйте GreenShok plugins, там много интересного по этой теме.
zerAlex2, "greensock" ("зеленый носок")
Wolsh, все по отдельности. А можно как-то все добавить в контейнер?
Выровняйте содержимое каждого объекта относительно центра. Точка привязки центр.
После
object1.scaleX = object1.scaleY = 4;
уже должны как вы хотите объекты увеличиваться.
Но если объектов несколько, а операция одна, то конечно проще:
var container:Sprite = new Sprite();
addChild(container);
container.addChild(object1);
container.addChild(object2);
container.scaleX = container.scaleY = 4;
уже должны как вы хотите объекты увеличиваться.Объекты то увеличатся, без проблем. Расстояние между ними останется прежним. Хоть от центра, хоть от топлефта, какая разница? Расстояние то одно))
Вот второй код, с контейнером, верно.
Ну можно и без контейнера расстояние умножить на скейл.
Не работает, он увеличивает область у container, но все, что у него добавлено так и остается как было
Область у контейнера, да? :) Всё чудесатее и чудесатее....
Добавлено через 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;
}
}
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.