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

sulion

Пользователи
  • Постов

    20
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные sulion

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

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

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

    Кол-во персонажей = 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
     

  2. В 14.03.2024 в 22:12, krapotkin сказал:

    Canvas.DrawBitmap()  на PaintBox

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

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

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

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

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

     

    Код и исполняемый файл прикладываю. У меня пока выдает в районе 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

  4. Спасибо :)  на скрине показал как набираю этот компонент чтобы дропнуть его на форму - и нет его :) 

    Гуглить его в яндексе пробовал и не нашёл ни вчера ни сегодня, на сайте docwiki.embarcadero.com все странички предполагают что "ну типа он у вас уже есть"

    Где его можно взять?

  5. Коллеги, добрый день!

    Вопрос на засыпку - помогите пожалуйста, чего мне не хватает для успешного запуска?

    Список dll файликов прикрепляю внизу письма, Oracle 12.2 клиент стоит, PL/SQL Developer 12 использую каждый день

     

    Симптомы:

    Из хорошего - FireDAC Explorer успешно видит все нужные мне БД - и таблицы, и пакеты и т.д.

     

    В Delphi XE7 приложение работало успешно. Delphi 10.2.3 подчёркивает два модуля. Если эти два модуля закомментарить, то - компилирует успешно, но не может подцепиться ни к одной БД Oracle

     

    Создал пустое приложение, в него положил TFDConnection, драйвер Oracle он не видит

     

    Что уже пробовал:

    Вчера поставил все dll. Сегодня поставил Delphi 10.3.1 Architect Trial (на месяц), в нём проблема воспроизводится. Ещё раз переустановил драйвер Oracle.

     

    Что ещё можно сделать?

     

     

    Обещанный список dll:

    oci.dll
    ocijdbc12.dll
    ocijdbc12.sym
    ociw32.dll
    ociw32.sym
    ojdbc8.jar
    oramysql12.dll
    oramysql12.sym
    orannzsbb12.dll
    orannzsbb12.sym
    oraocci12.dll
    oraocci12.sym
    oraocci12d.dll
    oraocci12d.sym
    oraociei12.dll
    oraociei12.sym
    oraons.dll
    orasql12.dll
    orasql12.sym

     

     

     

    errors2.thumb.jpg.5a5ab13830a1be84f639a499964ead7e.jpg

    23.7z Request.7z

     

  6. Ага, сработало! Спасибо!

    Кроме масштабирования мне ещё понадобится два действия:

     * сдвиг картинки в bitmap

     * совмещение нескольких (например, двух) битмапов на одном

    И, пожалуй, всё - остальное могу :)

    drawbitmap.7z

  7. Друзья, возникла необходимость большое количество картинок подравнивать (сдвигать изображение вправо-влево, масштабировать и затем сохранять). 

    Помогите пожалуйста правильно воспользоваться DrawBitmap

    Проект:drawbitmap.7z

  8. Krapotkin, спасибо большое за советы!

    Кажется, картинка сложилась. Дальше разберусь (или прибегу снова :) )

    PS По хранению на диске выбрал Zip-архив - посмотрел, архивы с ресурсами это довольно распространённое решение у игроделов

  9. TLDR: Откуда из файлов игры лучше загружать большое количество картинок?

     

    Доброе утро, коллеги!

    Я собираюсь приступить к написанию спрайтовой игры (в основном под Windows, в перспективе возможна сильно урезанная версия для Android)

    Соответственно, подбираю три вещи:

    1. Как хранить спрайты в файлах игры

    2. Как хранить спрайты в памяти

    3. Как их отображать

     

    В прошлых игрушках файлики лежали кучей в поддиректориях, и оттуда подбирались TImage.Bitmap.LoadFromFile

    Спасибо Fire Monkey даже такое "топорное" решение выдавало честные 20 fps. Cейчас хочется сделать "как полагается"

     

    Спрайт имеет размеры в пределах 800х600 (разный у разных персонажей), фоны от 960х540 до около 4000х540 (для платформерных мини-игр)

    Спрайтов у каждого персонажа 7200, персонажей 9  - с фонами и иконками под 100 000 картинок

    Спрайты персонажа разбиты по смыслу на анимации (7200 = 30 анимаций * 8 направлений * 30 кадров), то есть когда показывает анимацию то нужно только её тридцать кадров

    Одновременно на экране могут быть от одного персонажа (масштаб 1-2), до тридцати (масштаб 0,05-0,25)

     

    Спасибо за обстоятельные материалы по TImageList -  как понял, лучше много картинок хранить в нём.

    Если использовать объект TImageList - то скажется ли на производительности если использовать не один объект а дюжину - по одному на персонажа?

    Также интересует производительность TGlyph при быстрой смене ссылки на отображаемый спрайт (нужно минимум 10 fps)

     

    И - какие есть варианты откуда загружать эту графику?

    Желательно без создания временных файлов во время загрузки (отпадает TZipFile)

    Например, удастся ли мне сохранить и при следующем запуске загрузить объект TImageList со всем содержимым?

     

    Дело для меня новое, раньше писал только маленькие игрушки для друзей, сейчас хочется сделать по уму что-то похожее на нормальную игру (хотя и с открытым кодом)

    Заранее спасибо за советы!

  10. Если очень хочется работать попиксельно - то можно попиксельно свести два битмапа, вызывая getPixel одного и setPixel другого.

    http://docwiki.embarcadero.com/Libraries/Tokyo/en/FMX.Graphics.TBitmapData

  11. Здравствуйте!

     

    Я хочу получить Trackbar с рычажком-рисунком.

     

    Видимо, мне нужно поменять стиль HThumbBarStyle. Как добавить на него картинку? Вернее, картинку-то я добавил, но чего-то ещё не сделал, а чего - не знаю.

     

    Подскажите, пожалуйста.

    post-1488-0-95026000-1442048170.png

    6.7z

  12. Хаха, да, я заметил что картинка съезжает то на пиксель, то на два - и решил проверить закономерность.

    Дрожжание - как вы и сказали - решается WrapMode := Stretch

     

    Не могу поверить, что дважды наступил на те же грабли :) буду шерстить форум внимательнее :)

  13. Вопрос решился парой кликов мышкой: всего-то нужно быть переставить WrapMode у TImage в положение Stretch - подсмотрел в другой тебе на форуме.

     

    Всем спасибо! Очень тронут вниманием, накинутые идеи обязательно запомню и попробую.

  14. Здравствуйте!

     

    Очень нравится FireMonkey, спасибо за отличный продукт.

     

    Помогите пожалуйста вот с каким моментом: как программно поменять размер изображения TImage ?

     

    ...

    Character.Bitmap.LoadFromFile( i.m[ be, bi ].g ); {спрайтик}

    Character.Position.X := ( Hall.Width - Character.Width ) / 2; {стоим посредине}

    Character.Position.Y := ( Hall.Height - Character.Height); {стоим на полу}

    Character.Width := PC.Width * PC.Scale;

    Character.Height := PC.Height * PC.Scale;

    ...

     

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

     

    Это - кусочек кода, который по таймеру 10 раз в секунду отрисовывает персонажа. Топорно, без всяких оптимизаций (моя первая проба после TAnimationXXX). Вообще, скорость FireMonkey впечатляет - спрайт ростом с 3/4 экрана с лёгкостью меняется без морганий на очень слабом компьютере, и тики с относительно "тяжёлой" математикой не "наползают" друг на друга по времени.

     

    Объект PC - это персонаж, там хранятся вещмешок, умения, способности и пара полей для графики (масштаб PC.Scale и размеры в метрах PC.Height, PC.Width ).

    Форма запускается в полноэкранном режиме, на ней лежит TScaledLayout растянутый Align=Client на весь экран, внутри него - фоновый рисунок Hall, персонаж Character и класс-библиотека спрайтов, имена файлов рисунков доступны как i.m[].g

×
×
  • Создать...