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

Как одновременно изменить Position.X и Position.Y в анимации?


Sascha

Вопрос

Делаю так:

procedure TForm1.MoveButtonClick(Sender: TObject);
const
  Time = 1.0;
begin
  var
  P := Image1.Position.Point + TPointF.Create(200, 100);
  TAnimator.AnimateFloat(Image1, 'Position.X', P.X, Time);
  TAnimator.AnimateFloat(Image1, 'Position.Y', P.Y, Time);
end;

Как одновременно изменить Position.X и Position.Y, чтобы использовать их в AnimateFloatWait?

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

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

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

  • 0

Попробуйте библиотеку компонентов FGX, она содержит компонент TFgPositionAnimation, созданный для анимации свойств типа TPosition.

Я сам пробовал использовать этот компонент - работал нормально.

Изменено пользователем Дмитрий Потапов
Ссылка на комментарий
  • 0
13 минут назад, Дмитрий Потапов сказал:

Попробуйте библиотеку компонентов FGX, она содержит компонент TFgPositionAnimation, созданный для анимации свойств типа TPosition.

Я сам пробовал использовать этот компонент - работал нормально.

Она заброшена автором. Для Delphi 10.4.1 ее можно установить?

Ссылка на комментарий
  • 0
1 час назад, Sascha сказал:

Она заброшена автором. Для Delphi 10.4.1 ее можно установить?

Почему нет? В случае возникновения ошибок всегда можно их исправить самостоятельно.

 

1 час назад, Sascha сказал:

на гитхабе нашел два продолжения проекта:

https://github.com/ms301/fgx-firemonkey

https://github.com/theilgaz/FGX

Вы каким пользуетесь?

Сейчас никаким. Поначалу было нужно, сейчас не использую FireMonkey почти нигде.

Ссылка на комментарий
  • 0
2 часа назад, Дмитрий Потапов сказал:

Попробуйте библиотеку компонентов FGX, она содержит компонент TFgPositionAnimation, созданный для анимации свойств типа TPosition.

Я сам пробовал использовать этот компонент - работал нормально.

Попробовал. Не могу заставить запуститься анимацию. Метода типа Start нет. Думал, просто Enabled включу

 

  fgPositionAnimation1.StartValue := Image1.Position;
  fgPositionAnimation1.StopValue.X := Image1.Position.X + 200;
  fgPositionAnimation1.StopValue.Y := Image1.Position.Y + 200;
  fgPositionAnimation1.Duration := 1;
  fgPositionAnimation1.PropertyName := 'Position';
  fgPositionAnimation1.Enabled := True;

 

Ссылка на комментарий
  • 0
13 часов назад, Sascha сказал:

Как одновременно изменить Position.X и Position.Y, чтобы использовать их в AnimateFloatWait?

  TAnimator.AnimateFloat(Image1, 'Position.X', P.X, Time);
  TAnimator.AnimateFloatWait(Image1, 'Position.Y', P.Y, Time, Timewait);

Не проверял уже давно, но в андроид не работало, в Windows точно работает, 

я делаю так, в особых случаях

Внимание костыль!

 TTask.Run(procedure()
    begin
      TThread.Synchronize(nil, procedure()
       begin
         TAnimator.AnimateFloat(Image1, 'Position.X', P.X, Time);
         TAnimator.AnimateFloat(Image1, 'Position.Y', P.Y, Time);
       end);
    sleep(Time);
      TThread.Synchronize(nil, procedure()
       begin
       после анимации идет важная процедура)
       end);
    end);
Ссылка на комментарий
  • 0

никто не отменял классику - свой таймер и расчет координат руками, без RTTI и универсальности..

TAnimator собсно довольно простая штука

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

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

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

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

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

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

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

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

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

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

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