Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2011, 17:02   #1
ros.pro
Пользователь
 
Регистрация: 24.05.2011
Сообщений: 39
По умолчанию Плавное перемещение картинки

Доброго времени суток!
Есть следующая задача: Нужно чтобы мячик(Timage) "скакал" вверх и вниз.
Реализовал с помощью таймера:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if direction = 'bottom' then
  begin
    image1.Top:=image1.Top+1;
    label1.Caption:=inttostr(image1.Top);
    if image1.Top >= 350 then direction := 'top';
  end;

  if direction = 'top' then
  begin
    image1.Top:=image1.Top-1;
    label1.Caption:=inttostr(image1.Top);
    if image1.Top <= 0 then direction := 'bottom';
  end;
Мячик перемещается вверх и вниз. НО! Данный код очень сильно весит процессор. А мячик постоянно мигает, да и медленно двигается, хотя интервал равен 1.

Не подскажите ли как более правильно реализовать эту задачу? Заранее спасибо!
ros.pro вне форума Ответить с цитированием
Старый 24.05.2011, 17:35   #2
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

интервал у TTimer не бывает меньше 50... вот такой вот таймер.
так что ставьте интервал 50 и продвигайте мячик на большее расстояние.
в плане мерцания стандартный совет сделать form1.DoubleBuffered:=true;
только я еще ни разу не замечал каким местом это помогает...
xrob вне форума Ответить с цитированием
Старый 24.05.2011, 18:34   #3
ros.pro
Пользователь
 
Регистрация: 24.05.2011
Сообщений: 39
По умолчанию

Цитата:
Сообщение от xrob Посмотреть сообщение
интервал у TTimer не бывает меньше 50... вот такой вот таймер.
так что ставьте интервал 50 и продвигайте мячик на большее расстояние.
в плане мерцания стандартный совет сделать form1.DoubleBuffered:=true;
только я еще ни разу не замечал каким местом это помогает...
Спасибо, form1.DoubleBuffered:=true; помог - мерцание исчезло. Теперь мячик просто дергается, но не мерцает =)
Хм, а у меня ставить интервал 1, а если поставишь 50, то передвигается значительно медленнее...

Как бы сделать движение более плавным... ?
ros.pro вне форума Ответить с цитированием
Старый 24.05.2011, 18:55   #4
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Цитата:
Как бы сделать движение более плавным... ?
Нужно сделать маленький интервал таймера и делать малые приращения координат мячика.

Скинь проект сюда.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 24.05.2011, 19:09   #5
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

как сделать интервал в таймере меньше 50?
чило то любое можно записать, но быстрее чем через 50ms не срабатывает...
я это читал где-то, да и практика это подтверждает,
точно не замерял, но интервал в 1 ms срабатывал явно медленнее.
а чтоб мячик не дергался можно либо увеличить fps (частоту смены кадра)
либо усложнить картинку мячика, например чтоб при движении был мячик размазывался.
xrob вне форума Ответить с цитированием
Старый 24.05.2011, 19:27   #6
ros.pro
Пользователь
 
Регистрация: 24.05.2011
Сообщений: 39
По умолчанию

Цитата:
Сообщение от Valio Посмотреть сообщение
Нужно сделать маленький интервал таймера и делать малые приращения координат мячика.

Скинь проект сюда.
Весь код в первом посте. В том - то и дело, что и интервал таймера и координаты маятника изменяются по минимальным значениям...


2 xrob, а как увеличить FPS ?
ros.pro вне форума Ответить с цитированием
Старый 24.05.2011, 19:37   #7
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Причём тут FPS и какое отношение он имеет к данному проекту из таймера и мячика?

Цитата:
Весь код в первом посте. В том - то и дело, что и интервал таймера и координаты маятника изменяются по минимальным значениям...
Я хотелбы увидеть как твой мячик "двигается", может мы думаем о разных вещах. Например:
Вложения
Тип файла: rar Project1.rar (201.0 Кб, 64 просмотров)
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 24.05.2011, 20:03   #8
ros.pro
Пользователь
 
Регистрация: 24.05.2011
Сообщений: 39
По умолчанию

Цитата:
Сообщение от Valio Посмотреть сообщение
Я хотелбы увидеть как твой мячик "двигается", может мы думаем о разных вещах. Например:
Вот, кстати ваш пример работает очень хорошо. Не поделитесь исходниками ?)

Загрузил свой проект, мяч стал отображаться более плавно, однако производительность оставляет желать лучшего...
Вложения
Тип файла: rar Project1 (2).rar (201.9 Кб, 65 просмотров)
ros.pro вне форума Ответить с цитированием
Старый 24.05.2011, 20:10   #9
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Цитата:
как сделать интервал в таймере меньше 50?
У меня минимальный 10 - 20 получился. Видимо от компа зависит.

Цитата:
Не поделитесь исходниками ?
Исходнико то 2 строки.

Код:
dy : Integer;
...........

dy := 8;

...........

If (S1.Top > 280 - 40) Or (S1.Top < 20) Then dy := -dy;
S1.Top := S1.Top + dy;
Интервал таймера = 10
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 24.05.2011, 20:11   #10
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

Valio, да, действительно, казалось бы, причем тут fps,
но если подумать, то каждый раз когда мячик меняет свое положение,
чем это не очередной кадр?
называть это можно как угодно, но по сути, то как часто мячик изменит положение,
т.е. изменится вся картинка, и есть fps.
и то что здесь fps не указывается явно, не значит что к нему нет никакого отношения.
плавность перемещения мячика здесь зависит от частоты смены кадра,
частота смены кадра зависит от интервала таймера,
интервал таймера как мы знаем не выдает меньше 50 ms
и уменьшать его до 1 нет смысла.
а 50 ms это 1000 / 50 = 20 fps
даже для видео маловато...
так что вам, ros.pro, два выхода - либо искать другой аналог таймера, либо работать над картинкой.
xrob вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плавное появление картинки при наведении мыши на ссылку CodeNOT JavaScript, Ajax 7 28.04.2011 17:15
перемещение картинки dimonnnn JavaScript, Ajax 7 17.08.2010 20:28
Перемещение картинки Иринка26 Помощь студентам 10 20.04.2010 20:12
Плавное движение картинки KoBRaAndrey Общие вопросы Delphi 2 09.04.2010 11:42
перемещение картинки viperrr Мультимедиа в Delphi 0 06.06.2009 20:55