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

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

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

Регистрация: Nov 2003
Сообщений: 289
По умолчанию Как побороть погрешность при задании размерных свойств MovieClip (_width, _height)?

Вопрос, скорее к профи: movieclip залит битмапом(bitmapData) при помощи beginBitmapFill(). При последующем изменении размеров(._width, ._height) этого мувиклипа, в случае задания некоторых значений, реальные свойства клипа устанавливаются не точно. Пример: задаем клипу ширину 1475 (исходная 2000), а на деле клип преобретает _width = 1474.95 (такое значение видно в дебагере и при трейсе). Вопрос - как побороть? Как сделать чтобы ставишь 1475 и было 1475?

ps. все это нужно для того, чтобы сделать _плавное_ изменение размеров мувика... (остальные моменты вроде применения beginBitmapFill() вместо attachBitmap(), нужные smooting'и вроде учтены.. а иногда все равно еле заметно подергивается)

Старый 26.11.2007, 14:35
: hr : вне форума Посмотреть профиль Отправить личное сообщение для : hr : Найти все сообщения от : hr :
  № 2  
Ответить с цитированием
: hr :

Регистрация: Nov 2003
Сообщений: 289
Пример во вложении. Как-то слегка подергивается оно местами... В трейсе виден нюанс с размерами.
Вложения
Тип файла: rar bagTest.rar (40.3 Кб, 147 просмотров)

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Вся незадача в том... что если изменять размеры таким способом, то в действительности все преобразования с клипом рассчитываются по принципу:
взять из матрицы преобразования коеффициент и умножить на исходное значение, естесственно, что при больших или "неудачных" размерах желаемого результата ингода не возможно добится (точности до 8-го знака не всегда хватит).
Победить, я думаю, не удасться...
Если бы не нужна была картинка, можно было бы каждый кадр програмно рисовать... (так, например реализована Iris transition), а так - не, не думаю...
__________________
Hell is the possibility of sanity

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

Регистрация: Aug 2006
Адрес: Москва \ СПб
Сообщений: 10
Посмотрел-повертел пример, попробовал на очень замедленном варианте просмотреть...
Проблема не в погрешности преобразования, думаю, а в общей для всех растровых анимаций (в отличие от "пленочных" кинотехнологий, напр.) проблеме масштабирования растрового изображения. В ТВ это называется "биение" - при масштабировании объекта "играют" пиксели, в особенности - на наклонных линиях с углом наклона, близким к 90 или 0 град.
Общее же решение проблемы (хотя и не идеальное) - антиальясинг.
Реализовать настоящий антиалиас (да еще и не просто Nearest Neighborhood, а, к примеру, Bicubic) средствами флэш нереально - BitmapData бесславно погибнет по производительности на второй тысяче пикселов при попиксельной обработке.
Я бы попробовал на время зума фильтр Blur на минимуме включать. Если он только тоже провернет это дело.
А скорее - отказался бы от плавного зумирования картинки, ведь судя по примеру, все равно фиксируются только крайние состояния, а между ними зум - только в качестве transition. Ну я бы другой транзишн и сделал - от масштабируемой рамочки а-ля фотошоп до "трехступенчатого" зума - т.е. трех фиксированных "степеней увеличения" с небольшой задержкой, - если ТЗ позволяет.

Старый 08.01.2008, 15:00
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
И антиалисинг тут не причем.
Эта же проблема присутствует с векторнмыи объектами, я специально проверял.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 08.01.2008, 15:58
Aziz Zaynutdinoff вне форума Посмотреть профиль Отправить личное сообщение для Aziz Zaynutdinoff Посетить домашнюю страницу Aziz Zaynutdinoff Найти все сообщения от Aziz Zaynutdinoff
  № 6  
Ответить с цитированием
Aziz Zaynutdinoff
 
Аватар для Aziz Zaynutdinoff

Регистрация: Feb 2006
Адрес: Moscow
Сообщений: 552
Сталкивался с этим неоднократно. Особенно в проектах, где требуется доскональная попиксельная точность. Лечил так:
присваивал значение (целое числовое), потом приравнивал этоже значение, но через округление.
Код:
var newWidth : Number = 1475;
newWidth = Math.floor(newWidth);
Я это отношу к глюку Flash. Ибо даже располагая объект в точных координатах на сцене (через Properties), после нажатия на Enter иногда получаем тоже самое число с 4-мя (а то и более) знаков после запятой. И это не только с координатами так.

Старый 08.01.2008, 16:02
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 7  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
но обычно повторное изменение на нормальные координаты и нажатие ентер помогает (хотя не всегда)
__________________
Flash Developer
Папа TDP4 Team Battle

Старый 08.01.2008, 16:23
Aziz Zaynutdinoff вне форума Посмотреть профиль Отправить личное сообщение для Aziz Zaynutdinoff Посетить домашнюю страницу Aziz Zaynutdinoff Найти все сообщения от Aziz Zaynutdinoff
  № 8  
Ответить с цитированием
Aziz Zaynutdinoff
 
Аватар для Aziz Zaynutdinoff

Регистрация: Feb 2006
Адрес: Moscow
Сообщений: 552
Цитата:
Сообщение от CrazyFlasher
но обычно повторное изменение на нормальные координаты и нажатие ентер помогает (хотя не всегда)
Именно это и иллюстрируется кодом в приведенном мною посте выше

Старый 08.01.2008, 16:25
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 9  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Понятно.
Я советую посмотреть в этот момент на значение _xscale для _width или _yscale для _height. Когда я тестировал, у меня они имели цельные значения. Учитывая, что данные свойства являются геттерами/сеттерами, мы не знаем, что именно происходит в момент присваивания ширины/высоты. Возможно, при больших размерах, происходит округление процентных размеров, а не пиксельных. Отсюда и глюк.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Aug 2006
Адрес: Москва \ СПб
Сообщений: 10
Цитата:
Сообщение от Aziz Zaynutdinoff
Сталкивался с этим неоднократно. Особенно в проектах, где требуется доскональная попиксельная точность. Лечил так:
присваивал значение (целое числовое), потом приравнивал этоже значение, но через округление.
Код:
var newWidth : Number = 1475;
newWidth = Math.floor(newWidth);
Я это отношу к глюку Flash. Ибо даже располагая объект в точных координатах на сцене (через Properties), после нажатия на Enter иногда получаем тоже самое число с 4-мя (а то и более) знаков после запятой. И это не только с координатами так.
Так векторные объекты *на монитор* выводятся _растром_. Для антиальясинговых проблем вообще неважно, каким образом получены цвета пикселей - это проблема вывода на устройство.

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

PS. Попробуйте, коллеги, плавно и медленно отзуммировать серую линию в 1 px на черном фоне _любым_ способом (хоть прямым выводом в видеопамять ) без антиальясинга - увидите, о чем я...


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

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

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


 


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


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