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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.01.2010, 00:49
ovevil вне форума Посмотреть профиль Отправить личное сообщение для ovevil Найти все сообщения от ovevil
  № 1  
Ответить с цитированием
ovevil

Регистрация: Sep 2009
Сообщений: 9
По умолчанию Плавное увеличение

Доброе время суток. Есть проблема с которой не могу справиться. Есть флешка в которой много векторных элементов. Надо плавно маштабировать эту флешку. Сейчас это реализовано так
Код AS1/AS2:
function zoom_func() {
	if (_root.pan_mc.pan_mc._y<-1) {
		_root.logo_mc._xscale = _root.logo_mc._yscale=100+200/50*Math.round(Math.abs(_root.pan_mc.pan_mc._y))+Number(_root.varScale);
	} else if (_root.pan_mc.pan_mc._y>1) {
		_root.logo_mc._xscale = _root.logo_mc._yscale=100-50/50*Math.round(Math.abs(_root.pan_mc.pan_mc._y))+Number(_root.varScale);
	} else {
		_root.logo_mc._xscale = _root.logo_mc._yscale=100+Number(_root.varScale);
	}
	_root.zoom_txt.text = _root.logo_mc._xscale-Number(_root.varScale)+"%";
	_root.onMouseMove();
}
this.onMouseWheel = function(varDelta:Number) {
	_root.pan_mc.pan_mc._y -= varDelta/4;
	if (_root.pan_mc.pan_mc._y<-50) {
		_root.pan_mc.pan_mc._y = -50;
	} else if (_root.pan_mc.pan_mc._y>50) {
		_root.pan_mc.pan_mc._y = 50;
	}
	_root.zoom_func();
};
logo_mc содержит в себе около 2000 вложенных мувиков, нарисованых вектором. fps стоит 31. При маштабировании очень сильные рывки. Хотелось бы сделать более плавно. За ранее спасибо

Старый 28.01.2010, 01:30
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Решаемо. Была проблема с масштабированием мувика со сложным контентом.
Я сделал так:

0) Начало масштабирования. Получаем данные о пропорциях масштабирования (во сколько раз изменяем, ратио).
1) С целевого мувика, забитого векторной графикой, снимается битмапа-слепок (draw (BitmapData.draw method)).
2) Целевой мувик делается невидимым. (_visible = false)
3) Создается пустой мувик, в тех же координатах, что и масштабированный (нужно будет точно спозиционировать).
4) К нему приаттачивается полученная битмапа (attachBitmap (MovieClip.attachBitmap method)).

- глазу подмена практически незаметна
- имеем вместо нашего вектрообильного мувика простой мувик с битмапной картинкой внутри

5) Масштабируем копию с битмапой - все происходит плавно и без рывков.
6) В это время (тут же) скрытый мувик масштабируется в той же пропорции, используем известное ратио.
7) Конец масштабирования. Удаляем битмапную копию (removeMovkeClip) и проявляем оригинал (_visible = true).
Оригинал проявляется на том же месте и так же растянутый / сжатый, что глазу подмена опять незаметна.

В случае, если у вас целевой мувик не содержит объектов, с которыми в дальнейшем нужно производить какие-то действия, можно так и оставить битмапную копию, а оригинал вообще удалить (removeMovieClip).

Если у вас данные о пропорциях масштабирования вводятся с колесика, то рационально будет оставить и масштабировать битмапную копию до того момента, пока юзер не перестанет колесико крутить плюс несколько сотен миллисекунд, полсекунды например. Подобрать экспериментально придется.
Либо, что лучше всего, как уже сказал, вообще забыть про оригинал, и держать на сцене битмапную копию, если это у вас логотип или что-то чисто графическое масштабируется.

В инете, да и тут, наверное, есть готовые написанные функции для процедуры п.п. 1-4. Поищите, если хотите примерно по ключевым словам "растеризация мувика, мувиклипа",


Последний раз редактировалось mooncar; 28.01.2010 в 01:45.
Старый 28.01.2010, 03:31
ovevil вне форума Посмотреть профиль Отправить личное сообщение для ovevil Найти все сообщения от ovevil
  № 3  
Ответить с цитированием
ovevil

Регистрация: Sep 2009
Сообщений: 9
Спасибо. Попытался сделать, но уперся в одну трудность. Добавил вот этот код
Код AS1/AS2:
	var logoBitmap:BitmapData = new BitmapData(_root.logo_mc._width,_root.logo_mc._height, true, 0xff000000);
	logoBitmap.draw(_root.logo_mc);
	this.createEmptyMovieClip("logo_temp", this.getNextHighestDepth());
	_root.logo_temp._x=_root.logo_mc._x;
	_root.logo_temp._y=_root.logo_mc._y;
	logo_temp.attachBitmap(logoBitmap, 2, "auto", true);
	_root.logo_mc._visible = false;
В результате получается только четверь от реальной картинки. В чем может быть ошибка.

Старый 28.01.2010, 04:23
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Спозиционируйте контент logo_mc так, чтобы точка регистрации приходилось на левый верхний угол.
Если контент слишком громоздок для группового перемещения (трудно все перенести), то заключите logo_mc в мувик-контейнер, зайдите в него и спозиционируйте уже logo_mc опять-таки так, чтобы содержание было справа и внизу, чтобы нулевая точка приходилась на левый верхний угол.

Тогда растеризовать будете уже этот мувик-контейнер.

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

Вот, кстати, функция, я нашел у себя:
Код AS1/AS2:
import flash.display.BitmapData;
function rasterizeMovieClip (obj:MovieClip):MovieClip {
	var bd_mc:MovieClip = this.createEmptyMovieClip (obj._name + '_bd', this.getNextHighestDepth());
	var bd:BitmapData = new BitmapData(obj._width, obj._height, true, null);
	bd.draw(obj);
	bd_mc.attachBitmap (bd, bd_mc.getNextHighestDepth());
	bd_mc.forceSmoothing = true ; //можно сгладить тут, а можно и при аттаче
	bd_mc._x = obj._x ;
	bd_mc._y = obj._y ;
	obj._visible = false ;
	return bd_mc;
}	
rasterizeMovieClip (logo_mc);
Используйте прозрачную заливку..

Добавлено через 17 минут
Будет один будет нюанс - при изменениии _xscale и _yscale расширение копии пойдет вправо и вниз, а не во все стороны, так как контент сориентирован теперь относительно нулевой точки внизу и справа.

То есть в процессе масштабирования для компенсации этого нужно будет еще смещать координаты копии, если хотите, чтобы центр масштабирования приходился именно на центр контента.
В общем-то ничего сложного, голая арифметика. Я делал именно так.


Последний раз редактировалось mooncar; 28.01.2010 в 04:42.
Старый 28.01.2010, 17:06
ovevil вне форума Посмотреть профиль Отправить личное сообщение для ovevil Найти все сообщения от ovevil
  № 5  
Ответить с цитированием
ovevil

Регистрация: Sep 2009
Сообщений: 9
Большое спасибо, все получилось

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

Теги
маштабирование , Плавное увеличение

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

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


 


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


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