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

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

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

Регистрация: Oct 2008
Адрес: Воронеж
Сообщений: 12
По умолчанию Артифакты отображения

Добрый день.

Возникла проблема с отображением: какими-то кусками проглядывает нижний слой.

[IMG]http://dl.************/u/3277184/Bug.jpg[/IMG]

Вывод графики реализуется в три слоя: подложка (зеленый фон-трава), покрытие (дорога/плитка/разметка) и объекты (дома/люди). Каждый слой - это Sprite.

Объекты - это Shape, в graphics которого отрисованы соответствующие BitmapData. Они добавляются на свой слой при помощи addChild.

Временами возникают артефакты, как на картинке выше. Каким-то образом происходит так, что "пробивается" промежуточный слой покрытия и становится видна подложка. Временами "пробиваются" и часть объектов, так что подложка начинает виднеться еще и сквозь некоторых людей.

Буду очень благодарен за версии о происходящем и информацию о возможных путях решения проблемы.

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

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
ну кроме как рисовать все в битмапу ничего сразу в голову не приходит
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 25.11.2010, 16:04
amarenkov вне форума Посмотреть профиль Отправить личное сообщение для amarenkov Найти все сообщения от amarenkov
  № 3  
Ответить с цитированием
amarenkov

Регистрация: Oct 2008
Адрес: Воронеж
Сообщений: 12
Цитата:
Сообщение от cleptoman Посмотреть сообщение
ну кроме как рисовать все в битмапу ничего сразу в голову не приходит
Уже рассматриваю такой вариант. Но для этого придется потрудиться, поэтому хочется узнать, нет ли другого способа решить проблему .

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Похоже на глюки рендера в плеере. Он видимо просто офигивает от такого количества шейпов.
Цитата:
Объекты - это Shape, в graphics которого отрисованы соответствующие BitmapData. Они добавляются на свой слой при помощи addChild.
Кстати, зачем такие сложности? Почему просто не добавлять Bitmap?
Ну и cleptoman прав, при должном подходе, отрисовка в битмапу будет гораздо экономичнее.

Старый 25.11.2010, 23:12
amarenkov вне форума Посмотреть профиль Отправить личное сообщение для amarenkov Найти все сообщения от amarenkov
  № 5  
Ответить с цитированием
amarenkov

Регистрация: Oct 2008
Адрес: Воронеж
Сообщений: 12
Цитата:
Сообщение от alatar Посмотреть сообщение
Кстати, зачем такие сложности? Почему просто не добавлять Bitmap?
Можно сказать, что это наследие прошлого . Иными словами, я начал делать каждый объект отдельным MovieClip (у каждого объекта много анимаций). И одежда внутри, тоже была отдельными клипами. Работало стабильно и без глюков. И было просто в реализации. Однако, когда одежды стало больше - стали появляться такие проблемы. Часть из них ушла, когда я все объекты привел к Shape и всю графику стал рисовать в один Shape.

Рисовать в один Bitmap мне было неудобно, так как начало координат у него всегда в левом верхнем углу и плюс надо знать размер BitmapData, когда создаешь Bitmap.

Добавлено через 4 минуты
Цитата:
Сообщение от alatar Посмотреть сообщение
Уточните пару моментов. Фоновые элементы у вас какого размера? Как половина большого зеленого квадрата возле девушки?
И как у вы заливаете траву? Тоже состоит из элементов или это просто битмапа в качестве фона?
Фоновый элемент - трава - это прямоугольное изображение, которым я делаю FillBitmap у Shape.graphics. И заливаю полигон в виде ромба.

Нет, прямоугольники больше девушки, они вообще достаточно большие, где-то раза в два больше людей.

P.S. Нет, масок у меня нет вообще. И порядок "не тем" быть не может абсолютно точно.

Добавлено через 11 минут
Цитата:
Сообщение от chabapok Посмотреть сообщение
значит координаты могут считаться не правильно. Порядок тот, но выводит "не туда".
например.
как правило, все же, если ошибка -- то она закралась в своем коде, а не во флешь плеере %)


Ограничение имеет место. то ли 4к, то ли 8к - точно не помню. помню, что подобная фича встречалась.
Если бы ! Я свой код вылизал полностью - там нет ничего, влияющего на проблему. Больше всего ситуация похожа на то, что при большом количестве растровых изображений с прозрачностью в одной точке у плеера начинаются проблемы в определении пикселей под прозрачностью: например при выводе одного прозрачного пикселя он берет другой, который под ним. Но тот тоже оказывается прозрачным. После нескольких таких итераций плеер впадает в ступор и выбирает первый попавшийся не прозрачный .

Координаты в конкретном случае очень незначительные, ни порог в 4к, ни тем более в 8к, не переходят. Сейчас все элементы находятся в пределах экранных координат от -1500 до +1500.

Координаты тоже мною не считаются (ради этого я и использовал Sprite и Shape - чтобы не высчитывать где они должны быть относительно всего остального).

Старый 26.11.2010, 13:49
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 6  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Эффективность будет зависеть от того, сколько именно и что именно перерисовывать. Само по себе копирование большой картинки (выровненой строго по целочисленной координатной сетке) на современных машинах операция быстрая. Основное ограничение - подготовка картинки для отрисовки. Если на каждый кадр перерисовывать всю сцену, будет медленно. По хорошему, нужно вычислять области, которые требуется перерисовать и уже на них рисовать весь стэк объектов (не затрагивая области, которые точно не изменились). Фактически, это работа по вычислению repaint region, которую для обычно выполняет flash player.

А так - нужно смотреть конкретную реализацию. Я экспериментировал со скоростью через штатный "векторный" рендерер и свою отрисовку в битмапку через BitmapData.copyPixels. Пример был совершенно синтетический - какие-то квадратики меняющиеся. Если менялись картинки в противоположных углах экрана, отрисовка в битмапку была в несколько раз медленнее (точные цифры не помню), чем штатным рисовальщиком. Но в этом случае я перерисовывал всю картинку, у меня был очень тупой определяльщик repaint region. На локальных изменениях (изменения сосредоточены в одной небольшой области) своя отрисовка вроде бы была даже чуть быстрее, чем отрисовка плеером. Так что экспериментируйте. И не забывайте про BitmapData.lock() при отрисовке, он может улучшить производительность.

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

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
если у вас плюс ко всему много всяческих масок - вполне такой эффект может быть
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 25.11.2010, 18:43
chabapok вне форума Посмотреть профиль Отправить личное сообщение для chabapok Найти все сообщения от chabapok
  № 8  
Ответить с цитированием
chabapok

Регистрация: Jul 2009
Сообщений: 240
Записей в блоге: 1
два варианта
- либо глючит ваш алгоритм определенния последовательности вывода спрайтов
- либо глючит флеш плеер.


да, еще флешь плохо "кушает" координаты больше чем помоему 4096, может поэтому.

я б повставлял бы трейсы, поймал глюк и посмотрел бы - действительно ли порядок вывода графики тот, который нужен.

Старый 25.11.2010, 18:56
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 9  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
это с чего флэш стал плохо кушать координаты больше 4096?
это про ограничение размера битмапдаты
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Код AS3:
я б повставлял бы трейсы, поймал глюк и посмотрел бы - действительно ли порядок вывода графики тот, который нужен.
Тут вывод послойный. И порядок "не тем" быть не может.

Добавлено через 2 минуты
Цитата:
Вывод графики реализуется в три слоя: подложка (зеленый фон-трава), покрытие (дорога/плитка/разметка) и объекты (дома/люди). Каждый слой - это Sprite.
Уточните пару моментов. Фоновые элементы у вас какого размера? Как половина большого зеленого квадрата возле девушки?
И как у вы заливаете траву? Тоже состоит из элементов или это просто битмапа в качестве фона?

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

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

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


 


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


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