![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Oct 2008
Адрес: Воронеж
Сообщений: 12
|
Добрый день.
Возникла проблема с отображением: какими-то кусками проглядывает нижний слой. [IMG]http://dl.************/u/3277184/Bug.jpg[/IMG] Вывод графики реализуется в три слоя: подложка (зеленый фон-трава), покрытие (дорога/плитка/разметка) и объекты (дома/люди). Каждый слой - это Sprite. Объекты - это Shape, в graphics которого отрисованы соответствующие BitmapData. Они добавляются на свой слой при помощи addChild. Временами возникают артефакты, как на картинке выше. Каким-то образом происходит так, что "пробивается" промежуточный слой покрытия и становится видна подложка. Временами "пробиваются" и часть объектов, так что подложка начинает виднеться еще и сквозь некоторых людей. Буду очень благодарен за версии о происходящем и информацию о возможных путях решения проблемы. |
|
|||||
|
ну кроме как рисовать все в битмапу ничего сразу в голову не приходит
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
|
Регистрация: Oct 2008
Адрес: Воронеж
Сообщений: 12
|
Цитата:
. |
|
|||||
|
Похоже на глюки рендера в плеере. Он видимо просто офигивает от такого количества шейпов.
Цитата:
Ну и cleptoman прав, при должном подходе, отрисовка в битмапу будет гораздо экономичнее. |
|
|||||
|
Регистрация: Oct 2008
Адрес: Воронеж
Сообщений: 12
|
Можно сказать, что это наследие прошлого
. Иными словами, я начал делать каждый объект отдельным MovieClip (у каждого объекта много анимаций). И одежда внутри, тоже была отдельными клипами. Работало стабильно и без глюков. И было просто в реализации. Однако, когда одежды стало больше - стали появляться такие проблемы. Часть из них ушла, когда я все объекты привел к Shape и всю графику стал рисовать в один Shape. Рисовать в один Bitmap мне было неудобно, так как начало координат у него всегда в левом верхнем углу и плюс надо знать размер BitmapData, когда создаешь Bitmap. Добавлено через 4 минуты Цитата:
Нет, прямоугольники больше девушки, они вообще достаточно большие, где-то раза в два больше людей. P.S. Нет, масок у меня нет вообще. И порядок "не тем" быть не может абсолютно точно. Добавлено через 11 минут Цитата:
! Я свой код вылизал полностью - там нет ничего, влияющего на проблему. Больше всего ситуация похожа на то, что при большом количестве растровых изображений с прозрачностью в одной точке у плеера начинаются проблемы в определении пикселей под прозрачностью: например при выводе одного прозрачного пикселя он берет другой, который под ним. Но тот тоже оказывается прозрачным. После нескольких таких итераций плеер впадает в ступор и выбирает первый попавшийся не прозрачный .Координаты в конкретном случае очень незначительные, ни порог в 4к, ни тем более в 8к, не переходят. Сейчас все элементы находятся в пределах экранных координат от -1500 до +1500. Координаты тоже мною не считаются (ради этого я и использовал Sprite и Shape - чтобы не высчитывать где они должны быть относительно всего остального). |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 497
|
Эффективность будет зависеть от того, сколько именно и что именно перерисовывать. Само по себе копирование большой картинки (выровненой строго по целочисленной координатной сетке) на современных машинах операция быстрая. Основное ограничение - подготовка картинки для отрисовки. Если на каждый кадр перерисовывать всю сцену, будет медленно. По хорошему, нужно вычислять области, которые требуется перерисовать и уже на них рисовать весь стэк объектов (не затрагивая области, которые точно не изменились). Фактически, это работа по вычислению repaint region, которую для обычно выполняет flash player.
А так - нужно смотреть конкретную реализацию. Я экспериментировал со скоростью через штатный "векторный" рендерер и свою отрисовку в битмапку через BitmapData.copyPixels. Пример был совершенно синтетический - какие-то квадратики меняющиеся. Если менялись картинки в противоположных углах экрана, отрисовка в битмапку была в несколько раз медленнее (точные цифры не помню), чем штатным рисовальщиком. Но в этом случае я перерисовывал всю картинку, у меня был очень тупой определяльщик repaint region. На локальных изменениях (изменения сосредоточены в одной небольшой области) своя отрисовка вроде бы была даже чуть быстрее, чем отрисовка плеером. Так что экспериментируйте. И не забывайте про BitmapData.lock() при отрисовке, он может улучшить производительность. |
|
|||||
|
если у вас плюс ко всему много всяческих масок - вполне такой эффект может быть
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
|
два варианта
- либо глючит ваш алгоритм определенния последовательности вывода спрайтов - либо глючит флеш плеер. да, еще флешь плохо "кушает" координаты больше чем помоему 4096, может поэтому. я б повставлял бы трейсы, поймал глюк и посмотрел бы - действительно ли порядок вывода графики тот, который нужен. |
|
|||||
|
это с чего флэш стал плохо кушать координаты больше 4096?
это про ограничение размера битмапдаты
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
я б повставлял бы трейсы, поймал глюк и посмотрел бы - действительно ли порядок вывода графики тот, который нужен. Добавлено через 2 минуты Цитата:
И как у вы заливаете траву? Тоже состоит из элементов или это просто битмапа в качестве фона? |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:33. |
|
|
« Предыдущая тема | Следующая тема » |
|
|