![]() |
Почему так сильно падает FPS? Где вся производительность?
Вложений: 2
По невиданным мне причинам вращение 30 растровых картинок вызывает лаги(понижение FPS).
У меня в игре есть возможность сажать растения, когда оно созревает - на его заднем плане появляется анимация вращающегося свечения (100х100 px. растровая картинка) Задумывалось максимальное количество активных растений не больше 30 шт. Но! Начало сильно все лагать и падать FPS. Я пробовал ТвинЛайт, думал из-за него. Попробовал ентерфрейм - тоже самое. Когда у всех 30 растений включается анимация вращения клипа со свечением то FPS c 45 резко падает ниже 30. Что я делаю не так? Почему так все падает? Провел эксперимент - у меня отдельно есть пустой проект, где я провожу всякие испытания. Добавил на сцену 50 клипов (100х100 px. растровая картинка) и по клику включил вращение каждого клипа (также пробывал твином и ентерфреймом, твин лучше). FPS также сразу просело с 45 до 30. Что за!? Пробовал во Flashе менять в свойствах клипа менять визуализацию(варианты кеширования) - ничего не изменилось. Пробовал менять качество растрового изображения с png на jpeg - тоже ничего. Что делать? :((( *[никаких еффектов, в том числе и свечения нету, просто растровое изображение] |
Цитата:
Битмапдата одна на все картинки? |
Цитата:
1) Фильтры - это очень тормозная штука 2) Вращение объекта присвоением ему свойства rotation заставляет каждый раз пересчитываться матрицу трансформации объекта. Эта процедура более затратна, чем, скажем просто замена битмап даты. Я бы лучше сделал при первом запуске такой картинки кэширование всех ее кадров в битмапдату, а потом просто заменял бы ее покадрово. Это сильно упростит процессору работу в дальнейшем |
Цитата:
Я во флеше импортированую растровую картинку обернул в символ, и его уже использую в самой игре. Добавлено через 6 минут Цитата:
1) Я же написал, что - " (100х100 px. растровая картинка) ". 2) Так получается, это просто rotation такое тормознутое и все нагружает? Замена битмап даты - не совсем понял. А можно по подробней? Можно ссылки? |
Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Всё от того же caseyryan
Цитата:
http://gamedevblogs.ru/blog/actionscript/520.html |
Цитата:
Добавлено через 50 секунд Цитата:
|
Сдается мне, что лагает эта система, скорее всего, от чего-то другого. Не во вращении 30 картинок дело.
|
Профайлер (скаут) мгновенно показывает такие вещи, без гаданий где затык.
|
Цитата:
|
а какого размера битмапа?
|
Цитата:
Добавлено через 50 минут Цитата:
[frameRae:45] (все теже картинки 100х100) - FPS при 50 объектах почти не проседает. - при 100 объектах, 22-37 короче среднее FPS 30. Мне подходит вообщем. Как у меня это получилось: Я просто сделал анимацию (вращение+scale) в самом флеше. А самое главное, что анимация должна быть типа "Анимация движения" (при "Классической анимации движения" падает FPS) + если вы анимируете символ в котором есть маски (или возможно еще что то типа слоев, и других вложенных клипов) то для анимации обращайте данный клип в еще один клип, и производите трансформации уже с ним. Почему в клип, а не в Графику? Потому, что при обращении в графику тоже падает FPS. Даже не помогает преобразование в ключи. Надеюсь что так работает не только у меня, а мое решение тоже еще кому то поможет! :) --- --- --- Еще я выявил, что FPS начинает падать, когда поверх или снизу данного клипа размещается еще какой то клип. То есть если они друг друга перекрывают. Это особенности рендера Flash? |
Вложений: 3
Это костыльное решение. Да и вообще не решение, по сути. FPS все равно падает. И не важно до какого значения.
Скорее всего графика там у тебя векторная. Или в самих картинках, или в масках. Но тут точно какая-то дезинформация. Вот тут вообще 200 вращаются, и ни сколько FPS не проседает. Можно и 300 сделать, будет то же самое Код AS3:
|
Вложений: 4
Это растр. Импортирую в библиотеку swc только растр. Из вектора - маска, для каждого изображения.
Изображение которое я вращаю - свечение. Потом в определенное время я включаю visible = true - красной зоны (изображение ). Оно как раз перекрывает свечение, ну или под ним. Не суть. И начинает падать FPS. Позже попробую показать флеху и код. --- --- --- Вот флешка и исходники. Убрал векторные маски - ничего не изменилось, на FPS никак не повлияло. Дело просто в унылом рендере флеша. :( код: Код AS3:
|
Не надо гнать на флеш) я тебе привел код и файл, к котором двести картинок вращается. Запусти его у себя на компе. Если будет стабльно 30 фпс, значит дело в твоем коде. Если будет провисать, значит дело в компе. У меня и посерьезнее рендер бывал без провисаний, причем намного серьезнее
Цитата:
п.с. Открыть исходник не могу. Нет у меня Flash CC |
Цитата:
Как думаешь может посмотреть в сторону блиттинга, если проблема не решиться? Может поможет? |
Просмотрел исходник, причина лагов ясна - НЕ нужно оборачивать растровую картинку в мувик и делать над ней анимацию во флеше, это вся причина лагов. Как исправить:
1) Добавлять готовую растровую картинку сразу на сцену, НИ В КОЕМ случает НЕ НУЖНО оборачивать её ни в какие мувиклипы. 2) Анимацию вращения и увеличения создавать программно. Итог: лагов не будет. |
Цитата:
Цитата:
|
Цитата:
Попробовал. Серьезно, ничего не изменилось.( |
Цитата:
Цитата:
Добавлено через 39 секунд Код AS3:
Добавлено через 22 минуты Все дело в альфа канале. Если убрать у картинок прозрачность, лаги пропадают. Проблема в этом. Добавлено через 30 минут Пример со спрайтами теперь жутко лагает. Всего лишь выставлена прозрачность. Код AS3:
|
Цитата:
-от прозрачности; -от векторных масок; -от огромного[сарказм] количество клипов, 30 штук; (возможно что еще и от длинных анимаций) То ВСЯ суть заключается в этих особенностях нужной анимации. Я не могу просто взять и отказаться от прозрачности и забыть о такой классной фишке как маска. Мне все таки, что то подсказывает что все дело в рендере (с которым, не будем тыкать пальцами кто - не справляется), и к нему нужно найти правильный подход. (Возможно это тоже имеет значение но, анимация медленная 5 сек./1 оборот, также и с scale) |
Лаги только от прозрачности.
|
Цитата:
А вот с альфа каналом действительно тормозит сильнее |
Во всяком случае, прозрачность играет самую весомую роль.
Добавлено через 1 минуту Цитата:
|
В 2д тоже только матрицы. Вопрос кому их считать. И неужели во всем 3д не найдется места таком понятию, как контейнер ;) ?
|
Цитата:
|
При чем тут матрицы контейнера? ) Я не хочу работать с матрицами напрямую, когда можно легко поворачивать контейнер. Пусть пересчет матриц на себя берет комп.
Руководствуясь такой логикой, можно вообще на ассемблере писать. Какая разница, если результат один) |
caseyryan, разница в том, что код на ассемблере сложно заставить тормозить, в отличии от первого.
В С++, например, ассемблерные вставки в узких местах - это норма. |
Цитата:
|
То, что пример с ассемблером - некорректный.
Его используют там, где он нужен. То же и с матрицами. Думаю, трансформации матриц в подобном случае будут работать эффективней контейнера из-за меньшего уровня абстракции. |
Посчитать по 100500 матриц в каждом кадре с ожидаемым фпс, близким к 60 или посчитать 100500 матриц за всю (длительную) историю работы приложения. Оптимизация - это круто, но не забывайте, что кроме оптимизации кода существуют и другие направления оптимизации. И даже читабельность исходного кода может быть оптимизирована даже без комментариев. Само собой, если ты просто дышишь матрицами и их преобразованиями, то нет смысла свой приватный код захламлять разными к(а)нтейнераи даже на этапе инициализации. Но в другом случае операции перемещения, масштабирования, сдвига и вращения куда более понятны, чем универсальное преобразование в виде матрицы. Лишь бы эта строчка не попадала в "узкое место".
|
Цитата:
Код AS3:
|
elder_Nosferatu прав, в этом месте трансформация не решит. Разве что совсем мизер(меньше процента).
Так что не парьтесь. |
Цитата:
|
Цитата:
Это называется "слышит звон, да не знает где он") Пример с ассемблером, точно такой же как и с матицами. С ним тоже меньше уровней абстракции. Их как раз и придумывали для того, чтобы упростить работу программистам. Иначе все бы просто писали на ассемблере и было все к шоколаде |
| Часовой пояс GMT +4, время: 08:19. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.