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

sulion

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

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

  • Посещение

Активность репутации

  1. Like
    sulion отреагировална Pavel Vasilev в Аналог GLScene для Firemonkey   
    Только с тех пор адрес и название сменилось для поддержки OpenVX  на
    https://sourceforge.net/p/glscene/code/HEAD/tree/branches/VXScene/
  2. Thanks
    sulion отреагировална Slym в Скорость анимации сцены с большим количеством деталей   
    о... да мы меряемся?
    на 1000: 250-333fps 
    как тебе такое Sulion 10000...

    fps3.zip
  3. Like
    sulion отреагировална krapotkin в Скорость анимации сцены с большим количеством деталей   
    Удобство и универсальность ВСЕГДА противопоставлены быстродействию
    Бросьте идею использовать компоненты для рисования анимации. Что вы выиграли по сравнению с простым Canvas.DrawBitmap()  на PaintBox ??
    Ничего.
    Зато приобрели просто гигантский оверхед в виде ненужной универсальной начинки компонента TBitmap.
    Потом будут еще проблемы изза того, что не вы сами управляете масштабированием картинки в компоненте.
    Так игру не написать
  4. Like
    sulion отреагировална krapotkin в Скорость анимации сцены с большим количеством деталей   
    нет никакой технологии, есть набор Bitmap и рисование этих битмап напрямую на Canvas
    объем памяти ровно такой, что требуется для хранения этих битмапов.
    скорость отрисовки - максимальная, потому что кроме отрисовки вы собсно ничего не делаете вообще)
  5. Like
    sulion отреагировална Slym в Скорость анимации сцены с большим количеством деталей   
    А зачем постоянно bringtofront? одного раза не достаточно? там реально медленно...
    я полагаю нужна глубина сцены?
    многие ее делают слоями: дальний фон (горы), ближний фон (лес), сцена (персы), и воздух (падающий снег)
    кидаем 4 лейаута и на них распределяем спрайты
     
  6. Like
    sulion отреагировална Slym в Скорость анимации сцены с большим количеством деталей   
    Загружать картинки не в Stream а в битмап сразу
    source.zip
    1000

  7. Like
    sulion отреагировална dnekrasov в Помогите начать работу с Oracle   
    Для того, чтобы это работало нужна FireDACOracleDriver25(6)0.bpl. Не факт что она идёт вместе с Trial (в Community её точно нет).
  8. Thanks
    sulion отреагировална dnekrasov в Изменение размеров с помощью DrawBitmap   
    Чёт я совсем не понял что Вы делаете в Вашем примере. Зачем использовать маски при сдвиге и совмещении. Просто берёте нужный кусок битмапки (srcRect) и рисуете его там где Вам нужно (dstRect). Если размеры srcRect и dstRect не будут совпадать, то будет еще и масштабирование.
  9. Thanks
    sulion отреагировална dnekrasov в Изменение размеров с помощью DrawBitmap   
    Прежде чем рисовать на канве просто задайте размер результирующей битмапки. В Вашем случае:
    ... image2.Bitmap.SetSize(300, 300); image2.Bitmap.Canvas.BeginScene; ...  
  10. Like
    sulion получил реакцию от krapotkin в Как хранить картинки?   
    Krapotkin, спасибо большое за советы!
    Кажется, картинка сложилась. Дальше разберусь (или прибегу снова  )
    PS По хранению на диске выбрал Zip-архив - посмотрел, архивы с ресурсами это довольно распространённое решение у игроделов
  11. Thanks
    sulion отреагировална krapotkin в Как хранить картинки?   
    всегда лучше копировать куски из одной большой картинки, чем иметь много маленьких, поэтому ImageList самое то
    при этом нужно помнить про разумные ограничения по размеру этой "большой". поэтому даже если по одному листу на персонажа, никакой разницы не будет
    хранить так и так придется в файле, загружая при старте
    хранение в памяти самый сложный вопрос
    нужно чтобы все под рукой, и одновременно не переборщить с памятью. на мобилах ее немного. поэтому тут никто вам не ответит. крутите туда -сюда
  12. Like
    sulion отреагировална krapotkin в стандартная работа с ListBox (delete,rename,move)   
    вот очень хорошее видео по listbox/view

  13. Like
    sulion отреагировална Alex7wrt в Почему пляшет TImage?   
    Используйте свойство TImage.Wrapmode и настраивайте размеры. Можно поместить TImage в контейнер и указать свойство Align:=TAlignLayout.Center
  14. Like
    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; думаю так
  15. Like
    sulion отреагировална krapotkin в Как программно отмасштабировать TImage   
    я делал галерею полностью из layout + scrollbox для timage, заключенных в эти layouts
    и в той же программе просто масштабируемый вывод нескольких слоев картинки в панель
    во втором случае мне кажется использование TImage не нужно
  16. Like
    sulion отреагировална AngryOwl в Как программно отмасштабировать TImage   
    Если попроще, то я бы сделал так:
    - один TListBox (с выравниванием либо Bottom, либо Client)
    - с нужным количеством TListBixItem, соответственно кол-ву "фигур"
    - у TListBox Columns = кол-ву TListBixItem, либо ListStyle = Horizontal
    - ну и соответственно все настройки по высоте и т.п.
    - TListBox.StyleLookup = 'transparentlistboxstyle'
    - поместил бы в каждый TListBixItem по картинке (TImage) с выравниванием Bottom
    и менял бы высоту этих картинок.......
     
    З.Ы. Если Вам не нужно что-то более "красивое"
     
    З.З.Ы. А можно сделать свой дополнительный стиль для TListBixItem, взяв за основу стандартный стиль и изменив в нем объект 'icon'. Тогда не нужен будет TImage для каждого TListBixItem, и можно будет управлять им через StylesData['icon.....']...
  17. Like
    sulion отреагировална rareMax в Как программно отмасштабировать TImage   
    хмм что то похоже на это делаете?

  18. Like
    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.
  19. Like
    sulion отреагировална Brovin Yaroslav в О видах координат в FireMonkey и конвертации между ними   
    Типы координат
    В FIreMonkey различают три вида координат:
    Локальные - это координаты в системе координат контрола.  Абсолютные - это координаты в системе координат клиентской части формы. Экранные - это координаты в системе координат экрана. Соответственно, если речь идет о форме, то позиция формы задается в экранных координатах.
    Если речь идет о контролах, то в локальных координатах своего родительского контрола.
     
    Конвертация
    Локальные -> Абсолютные
    TControl.LocalToAbsolute(TPointF): TPointF Абсолютные -> Локальные
    TControl.AbsoluteToLocal(TPointF): TPointF Абсолютные -> Экранные
    TControl.Scene.LocalToScreen(TPointF): TPointF; Экранные -> Локальные
    TControl.Scene.ScreenToLocal(TPointF): TPointF;
  20. Like
    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). Идея 
×
×
  • Создать...