Перейти к содержанию
Fire Monkey от А до Я
  • 0

Скорость анимации сцены с большим количеством деталей


sulion

Вопрос

Друзья, привет!

Как можно радикально поднять скорость отображения картинки?

 

Код и исполняемый файл прикладываю. У меня пока выдает в районе 10-15 fps, больше получить не удается

Как пользоваться:

1. Запускаем

2. Вводим 100

3. Смотрим на цифру сверху - там будет, какой fps выдает программа

 

Контекст вопроса

Перед вами - тест-бенчмарк, по которому я определяю, какими инструментами пользоваться

LoadFromStream. Перешел на потоки - это дало ускорение в несколько раз: раз в пять ускорил переход от LoadFromFile к LoadFromStream - это прямо повлияло на fps. Раза в два ускорил переход от каталога с файлами к zip-архиву, это скорее про время загрузки.

BeginScene. Читал на этом форуме, что он дает некоторое ускорение

BringToFront. Персонажам в будущем предстоит входить в дома и обходить деревья, для таких операций в RAD Studio предусмотреть BringToFront/SendToBack, т.е. понадобится перестраивать поштучно Z-порядок, когда кто-то кого-то загородил. Соответственно, в вызовем разок. По моим наблюдениям - если закомментарить эту строчку, то fps увеличивается вдвое. Т.е. если на этих инструментах написать игру, то она будет идти плавно, но когда одна-единственная деталь поменяет Z-порядок, то игра вдвое снизит fps а потом возобновит плавность. Рывок будет заметный

Что ещё можно предпринять, чтобы поднять fps?

fps.zip source.zip

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
В 12.03.2024 в 12:51, Slym сказал:

Загружать картинки не в Stream а в битмап сразу

Я думаю почему так кадров много, тоже делал на днях как у вас, только проблема не в этом, вся загвоздка в bringtofront, вот эту проблему как решить? Забил на это так как времени не было.

Так же делал все это в потоке с использованием floatanimation, но прирост не большой получился.

Изменено пользователем OnePeople
Ссылка на комментарий
  • 1
20 часов назад, OnePeople сказал:

Я думаю почему так кадров много, тоже делал на днях как у вас, только проблема не в этом, вся загвоздка в bringtofront, вот эту проблему как решить? Забил на это так как времени не было.

Так же делал все это в потоке с использованием floatanimation, но прирост не большой получился.

А зачем постоянно bringtofront? одного раза не достаточно? там реально медленно...
я полагаю нужна глубина сцены?
многие ее делают слоями: дальний фон (горы), ближний фон (лес), сцена (персы), и воздух (падающий снег)
кидаем 4 лейаута и на них распределяем спрайты
 

Ссылка на комментарий
  • 1

Удобство и универсальность ВСЕГДА противопоставлены быстродействию

Бросьте идею использовать компоненты для рисования анимации. Что вы выиграли по сравнению с простым Canvas.DrawBitmap()  на PaintBox ??

Ничего.

Зато приобрели просто гигантский оверхед в виде ненужной универсальной начинки компонента TBitmap.

Потом будут еще проблемы изза того, что не вы сами управляете масштабированием картинки в компоненте.

Так игру не написать

Ссылка на комментарий
  • 0
В 14.03.2024 в 22:12, krapotkin сказал:

Canvas.DrawBitmap()  на PaintBox

Благодарю! Почитаю

Решение уважаемого Slym у меня дает 70+ fps без перестановки порядка и 30+ fps с перестановкой при объеме занимаемой памяти 56 МБ на 1000 персонажей

Какой выигрыш по fps и памяти вы ожидаете по вашей технологии?

Изменено пользователем sulion
Ссылка на комментарий
  • 1

нет никакой технологии, есть набор Bitmap и рисование этих битмап напрямую на Canvas

объем памяти ровно такой, что требуется для хранения этих битмапов.

скорость отрисовки - максимальная, потому что кроме отрисовки вы собсно ничего не делаете вообще)

Ссылка на комментарий
  • 0

Доброго вечера!

Код и картинка по методу уважаемого господина Крапоткина - ниже

У меня получился такой результат:

Кол-во персонажей = 1000

|   метод                                                                                                                           |   fps   |   память   |
|   LoadFromFile из дерева каталогов, 1000 TImage, со сменой Z-порядка           |   0      |   581 МБ   |   нулевая версия c 6 МБ картинок
|   LoadFromStream из архива в поток, 1000 TImage, со сменой Z-порядка          |   0      |   78 МБ    |   (c) я, первый пост в этой ветке
|   LoadFromStream из архива в битмап, 1000 TImage, со сменой Z-порядка       |   30    |   59 МБ    |   (с) Slym, 12 марта
|   LoadFromStream из архива в битмап, рисуем сразу в Z-порядке на Canvas    |   70    |   24 МБ    |   (с) Крапоткин, 16 марта

Т.о. метод уважаемого Крапоткина - самый быстрый и экономный. Выигрыш - более чем вдвое. Снимаю шляпу

 

Код и картинка:

fps3.zip

image.thumb.png.109da9d251c947231014cccc491a47b7.png
 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...