Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.08.2012, 05:49
koljsch вне форума Посмотреть профиль Отправить личное сообщение для koljsch Найти все сообщения от koljsch
  № 1  
Ответить с цитированием
koljsch
[+6 22.06.12]

Регистрация: Jun 2012
Сообщений: 70
По умолчанию Пропорции объектов

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

Старый 29.08.2012, 12:21
Korchy вне форума Посмотреть профиль Отправить личное сообщение для Korchy Найти все сообщения от Korchy
  № 2  
Ответить с цитированием
Korchy
 
Аватар для Korchy

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
Точка привязки спрайта - левый верхний угол. Масштаб соответственно делается относительно него. Масштаб относительно другой точки привязки обычно делается через матрицы трансформации путем перемещения объекта нужной точкой в 0,0, масштабирования, и перемещения объекта нужной точкой обратно.
__________________
interplanety

Старый 29.08.2012, 12:25
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
как мне сохранить пропорции объектов при увеличение(т.е. их координаты).
Масштабировать надо систему координат, а не объекты. Вы когда фотку уменьшаете, тоже отдельно глаза, нос и рот? Или все же всю систему целиком? Так и здесь. Масштабируйте контейнер с этими объектами.
__________________
Reality.getBounds(this);

Старый 29.08.2012, 14:27
zerAlex2 вне форума Посмотреть профиль Отправить личное сообщение для zerAlex2 Найти все сообщения от zerAlex2
  № 4  
Ответить с цитированием
zerAlex2

Регистрация: Nov 2005
Сообщений: 148
Попробуйте GreenShok plugins, там много интересного по этой теме.

Старый 29.08.2012, 16:19
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 5  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
zerAlex2, "greensock" ("зеленый носок")
__________________
hauts.ru

Старый 29.08.2012, 17:20
koljsch вне форума Посмотреть профиль Отправить личное сообщение для koljsch Найти все сообщения от koljsch
  № 6  
Ответить с цитированием
koljsch
[+6 22.06.12]

Регистрация: Jun 2012
Сообщений: 70
Wolsh, все по отдельности. А можно как-то все добавить в контейнер?

Старый 29.08.2012, 19:57
spirit2 вне форума Посмотреть профиль Отправить личное сообщение для spirit2 Найти все сообщения от spirit2
  № 7  
Ответить с цитированием
spirit2

Регистрация: Dec 2009
Сообщений: 125
Выровняйте содержимое каждого объекта относительно центра. Точка привязки центр.
После
Код 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;

Старый 29.08.2012, 20:52
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
уже должны как вы хотите объекты увеличиваться.
Объекты то увеличатся, без проблем. Расстояние между ними останется прежним. Хоть от центра, хоть от топлефта, какая разница? Расстояние то одно))
Вот второй код, с контейнером, верно.
Ну можно и без контейнера расстояние умножить на скейл.
__________________
Reality.getBounds(this);

Старый 30.08.2012, 19:48
koljsch вне форума Посмотреть профиль Отправить личное сообщение для koljsch Найти все сообщения от koljsch
  № 9  
Ответить с цитированием
koljsch
[+6 22.06.12]

Регистрация: Jun 2012
Сообщений: 70
Не работает, он увеличивает область у container, но все, что у него добавлено так и остается как было

Старый 30.08.2012, 20:34
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Область у контейнера, да? Всё чудесатее и чудесатее....

Добавлено через 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;
		}
	}
}
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:27.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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