sulion
-
Постов
20 -
Зарегистрирован
-
Посещение
Активность репутации
-
sulion отреагировална Pavel Vasilev в Аналог GLScene для Firemonkey
Только с тех пор адрес и название сменилось для поддержки OpenVX на
https://sourceforge.net/p/glscene/code/HEAD/tree/branches/VXScene/
-
sulion отреагировална Slym в Скорость анимации сцены с большим количеством деталей
о... да мы меряемся?
на 1000: 250-333fps
как тебе такое Sulion 10000...
fps3.zip
-
sulion отреагировална krapotkin в Скорость анимации сцены с большим количеством деталей
Удобство и универсальность ВСЕГДА противопоставлены быстродействию
Бросьте идею использовать компоненты для рисования анимации. Что вы выиграли по сравнению с простым Canvas.DrawBitmap() на PaintBox ??
Ничего.
Зато приобрели просто гигантский оверхед в виде ненужной универсальной начинки компонента TBitmap.
Потом будут еще проблемы изза того, что не вы сами управляете масштабированием картинки в компоненте.
Так игру не написать
-
sulion отреагировална krapotkin в Скорость анимации сцены с большим количеством деталей
нет никакой технологии, есть набор Bitmap и рисование этих битмап напрямую на Canvas
объем памяти ровно такой, что требуется для хранения этих битмапов.
скорость отрисовки - максимальная, потому что кроме отрисовки вы собсно ничего не делаете вообще)
-
sulion отреагировална Slym в Скорость анимации сцены с большим количеством деталей
А зачем постоянно bringtofront? одного раза не достаточно? там реально медленно...
я полагаю нужна глубина сцены?
многие ее делают слоями: дальний фон (горы), ближний фон (лес), сцена (персы), и воздух (падающий снег)
кидаем 4 лейаута и на них распределяем спрайты
-
sulion отреагировална Slym в Скорость анимации сцены с большим количеством деталей
Загружать картинки не в Stream а в битмап сразу
source.zip
1000
-
sulion отреагировална dnekrasov в Помогите начать работу с Oracle
Для того, чтобы это работало нужна FireDACOracleDriver25(6)0.bpl. Не факт что она идёт вместе с Trial (в Community её точно нет).
-
sulion отреагировална dnekrasov в Изменение размеров с помощью DrawBitmap
Чёт я совсем не понял что Вы делаете в Вашем примере. Зачем использовать маски при сдвиге и совмещении. Просто берёте нужный кусок битмапки (srcRect) и рисуете его там где Вам нужно (dstRect). Если размеры srcRect и dstRect не будут совпадать, то будет еще и масштабирование.
-
sulion отреагировална dnekrasov в Изменение размеров с помощью DrawBitmap
Прежде чем рисовать на канве просто задайте размер результирующей битмапки. В Вашем случае:
... image2.Bitmap.SetSize(300, 300); image2.Bitmap.Canvas.BeginScene; ...
-
sulion получил реакцию от krapotkin в Как хранить картинки?
Krapotkin, спасибо большое за советы!
Кажется, картинка сложилась. Дальше разберусь (или прибегу снова )
PS По хранению на диске выбрал Zip-архив - посмотрел, архивы с ресурсами это довольно распространённое решение у игроделов
-
sulion отреагировална krapotkin в Как хранить картинки?
всегда лучше копировать куски из одной большой картинки, чем иметь много маленьких, поэтому ImageList самое то
при этом нужно помнить про разумные ограничения по размеру этой "большой". поэтому даже если по одному листу на персонажа, никакой разницы не будет
хранить так и так придется в файле, загружая при старте
хранение в памяти самый сложный вопрос
нужно чтобы все под рукой, и одновременно не переборщить с памятью. на мобилах ее немного. поэтому тут никто вам не ответит. крутите туда -сюда
-
sulion отреагировална krapotkin в стандартная работа с ListBox (delete,rename,move)
вот очень хорошее видео по listbox/view
-
sulion отреагировална Alex7wrt в Почему пляшет TImage?
Используйте свойство TImage.Wrapmode и настраивайте размеры. Можно поместить TImage в контейнер и указать свойство Align:=TAlignLayout.Center
-
sulion отреагировална AngryOwl в Как нарисовать круглый TImage
var BmpNew : TBitmap; begin BmpNew := TBitmap.Create; BmpNew.SetSize({нужный размер}, {нужный размер}); BmpNew.Canvas.BeginScene; try BmpNew.Canvas.Fill.Kind := TBrushKind.Bitmap; BmpNew.Canvas.Fill.Bitmap.WrapMode := TWrapMode.TileStretch; BmpNew.Canvas.Fill.Bitmap.Bitmap := {ваш битмап}; BmpNew.Canvas.Clear(0); BmpNew.Canvas.FillEllipse(RectF(0, 0, {нужный размер}, {нужный размер}), 1); finally BmpNew.Canvas.EndScene; end; TImage{ваш объект}.Bitmap.Assign(BmpNew); end; думаю так
-
sulion отреагировална krapotkin в Как программно отмасштабировать TImage
я делал галерею полностью из layout + scrollbox для timage, заключенных в эти layouts
и в той же программе просто масштабируемый вывод нескольких слоев картинки в панель
во втором случае мне кажется использование TImage не нужно
-
sulion отреагировална AngryOwl в Как программно отмасштабировать TImage
Если попроще, то я бы сделал так:
- один TListBox (с выравниванием либо Bottom, либо Client)
- с нужным количеством TListBixItem, соответственно кол-ву "фигур"
- у TListBox Columns = кол-ву TListBixItem, либо ListStyle = Horizontal
- ну и соответственно все настройки по высоте и т.п.
- TListBox.StyleLookup = 'transparentlistboxstyle'
- поместил бы в каждый TListBixItem по картинке (TImage) с выравниванием Bottom
и менял бы высоту этих картинок.......
З.Ы. Если Вам не нужно что-то более "красивое"
З.З.Ы. А можно сделать свой дополнительный стиль для TListBixItem, взяв за основу стандартный стиль и изменив в нем объект 'icon'. Тогда не нужен будет TImage для каждого TListBixItem, и можно будет управлять им через StylesData['icon.....']...
-
sulion отреагировална rareMax в Как программно отмасштабировать TImage
хмм что то похоже на это делаете?
-
sulion отреагировална Brovin Yaroslav в Почему для моих объектов стиля сбрасываются данные при прокручивании TListBox?
Это хороший вопрос. Я поясню.
TListBox может иметь большое число элементов (Items, например 1000). Однако, реально из них отображается только видимая часть (Например 50). Отсюда приходит мысль, что не следует грузить стиль всем элементам в лист боксе, поскольку это займет очень много ресурсов: как процессорного времени на загрузку, так и памяти на хранение. При прокручивании TListBox, стили выгружаются с невидимых элементов, и загружаются для новых видимых. Каждый элемент TListBoxItem, хранит свои данные у себя (Text, IsChecked, Bitmap). Когда стиль загружается, сам элемент TListBoxItem, устанавливает нужные данные в объекты стиля в соответствии с хранимыми данными (Text, IsChecked, Bitmap). При выгрузке стиля установленные данные в объекты стиля, теряются. Если только они не были самостоятельно сохранены. Когда вы вручную самостоятельно добавляете свой объект в стиле, вы должны позаботиться о том, чтобы сохранить задаваемые данные для элементов и восстановить эти значения при очередной загрузке стиля. TStyledControl поддерживает встроенный механизм кэширования пользовательских данных через StylesData. При использовании StylesData контрол автоматически сохраняет ваше значение в своем словаре и при смене стиля самостоятельно обновляет свойства объектов стиля в соответствии с хранимыми данными в словаре. О том, как работать с StylesData можно прочитать тут: Доступ к элементам стиля StylesData Когда вы стали использовать вариант с icon, то по сути сам TListBoxItem за вас восстановил иконку, поскольку это заложено в его базовое поведение P.S. Используйте StylesData.
-
sulion отреагировална Brovin Yaroslav в О видах координат в FireMonkey и конвертации между ними
Типы координат
В FIreMonkey различают три вида координат:
Локальные - это координаты в системе координат контрола. Абсолютные - это координаты в системе координат клиентской части формы. Экранные - это координаты в системе координат экрана. Соответственно, если речь идет о форме, то позиция формы задается в экранных координатах.
Если речь идет о контролах, то в локальных координатах своего родительского контрола.
Конвертация
Локальные -> Абсолютные
TControl.LocalToAbsolute(TPointF): TPointF Абсолютные -> Локальные
TControl.AbsoluteToLocal(TPointF): TPointF Абсолютные -> Экранные
TControl.Scene.LocalToScreen(TPointF): TPointF; Экранные -> Локальные
TControl.Scene.ScreenToLocal(TPointF): TPointF; -
sulion отреагировална Brovin Yaroslav в Как получить текущее положение пальца на экране?
Здесь есть два варианта решения:
1. Использовать сервис FMX.Types.IFMXMouseService
Этот сервис позволяет получить координаты последнего положения курсора мыши, нажатия или перемещения пальца по экрану. Однако если пользователь оторван палец от экрана, то сервис вернет последнее положение пальца на экране. Этот метод хорош тем, что позволяет узнать положение в любой момент в любом месте экрана. Метод возвращает абсолютные координаты в СК формы. При использовании этого варианта и при частой необходимости получать координаты, сервис лучше сохранить локально в отдельную переменную, чтобы каждый раз не выполнять запрос на получение сервиса. Так как эта функция требует дополнительных ресурсов.
var MouseService: IFMXMouseService; MousePos: TPointF; begin // MouseService - лучше вынести отдельным полем класса и инициализировать ее например при создании формы. if TPlatformServices.Current.SupportsPlatformService(IFMXMouseService, IInterface(MouseService)) then MousePos := MouseService.GetMousePos end; 2. Использовать глобальный объект Screen: TScreen
В FireMonkey есть глобальный объект, который предоставляет информацию о экране. Он внутри использует несколько сервисов.
В частности, у него есть метод:
Screen.MousePos Который использует 1 подход и вернет такой же результат. Но в отличии от первого способа, тут не нужно запрашивать сервис, это сделано в TScreen.
3. Использовать стандартные события OnMouseDown, OnMouseMove, OnMouseUp
Собственно способ заключается в определении текущего положения пальца через событие OnMouseMove. Однако, этот способ подходит только для контролов, которые могут перехватывать события мыши (HitTest = True). Идея