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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2006, 15:36   #1
Flash_
Пользователь
 
Аватар для Flash_
 
Регистрация: 19.12.2006
Сообщений: 91
По умолчанию Таймер.

Есть переменная вещественного типа. Надо, чтобы с течением времени её величина изменялась. Причем не через определенный интервал времени на определенное значение, а как можно "плавнее"..
Как это можно средствами Delphi реализовать?
Flash_ вне форума Ответить с цитированием
Старый 20.12.2006, 15:49   #2
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Что значит "не через определенный интервал времени"? В любом случае он будет изменятся через определенный промежуток времени, пусть даже очень маленький. Как не крути. Можешь попробовать так.
Код:
var r:real;
begin
repeat
r:=r+0.1;
Sleep(100);
until .... // Постусловие
end.
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 20.12.2006, 16:02   #3
Flash_
Пользователь
 
Аватар для Flash_
 
Регистрация: 19.12.2006
Сообщений: 91
По умолчанию

Я имел ввиду чем меньше этот промежуток, тем лучше.)
Просто я таймером и не пользовался-то никогда.. Поясни ещё немного, плз)
Sleep(100); это что? =)
Flash_ вне форума Ответить с цитированием
Старый 20.12.2006, 16:05   #4
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Sleep - Что то типа простоя. В скобках указывается время в миллисекундах. То есть при желании можно поставаить хоть 1.
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 20.12.2006, 16:19   #5
Flash_
Пользователь
 
Аватар для Flash_
 
Регистрация: 19.12.2006
Сообщений: 91
По умолчанию

Тогда понятно. Спасибо! Теперь осталось придумать, как записать
until <зажата кнопка "вниз"> %)
Хотя скорее всего сделаю без цикла с постусловием..
Немного изменю "проект"))
С этим уж разберусь.

Последний раз редактировалось Flash_; 20.12.2006 в 17:34.
Flash_ вне форума Ответить с цитированием
Старый 20.12.2006, 17:31   #6
Flash_
Пользователь
 
Аватар для Flash_
 
Регистрация: 19.12.2006
Сообщений: 91
По умолчанию

Теперь вот в чем беда...
По задумке при нажатии определенной клавиши объект face (это обычный овал - Shape) должен 10-ью кадрами (задержка кадра - 15мс, изменение координаты: 5пикс./кадр) плавно подняться на 50 пикселей.
А на деле получается, что проходит 1.5с и face резко перепрыгивает на 50пикс. Вот фрагмент кода. Что можно сделать, чтобы было "как по задумке"?

Код:
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);

  var i: integer;

begin
 
if key= VK_UP then for i:=1 to 10 do
                   begin
                   face.Top:=face.Top-5;
                   sleep(15);
                   end;
 
if key= VK_DOWN  then for i:=1 to 10 do
                    begin
                    face.Top:=face.Top+5;
                    sleep(15);
                    end;
 
if key= VK_LEFT then for i:=1 to 10 do
                     begin
                     face.Left:=face.Left-5;
                     sleep(15);
                     end;
 
if key= VK_RIGHT then for i:=1 to 10 do
                      begin
                      face.Left:=face.Left+5;
                      sleep(15);
                      end;
 
end;
Flash_ вне форума Ответить с цитированием
Старый 20.12.2006, 18:50   #7
-=DeS=-
Форумчанин
 
Аватар для -=DeS=-
 
Регистрация: 20.12.2006
Сообщений: 135
Восклицание

Щя погоди....подумаю...
writeln('Hello Dude!!!');

Последний раз редактировалось -=DeS=-; 20.12.2006 в 19:06.
-=DeS=- вне форума Ответить с цитированием
Старый 20.12.2006, 19:12   #8
Flash_
Пользователь
 
Аватар для Flash_
 
Регистрация: 19.12.2006
Сообщений: 91
По умолчанию

Думать это хорошо=) Я тож думаю..) Пока что надумал только то, что сначала выполняется весь цикл, а уже потом происходит изменение изображения на экране. Следовательно, цикл здесь не подойдёт. Ещё попробовал сделать вот как:
Код:
... 
var i: integer;
label k; 
begin
i:=0;
if key=VK_UP then k: 
                         face.Top:= face.Top-5;
                         i:=i+1;
                         if i<10 then goto k;
Но это не помогло - эффект тот же.
Flash_ вне форума Ответить с цитированием
Старый 20.12.2006, 19:26   #9
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Перерисовывать ручками и всё. (Объект твой на канве же скорее всего лежит, так вот в цикле деллай перерисовку канвы)
zetrix вне форума Ответить с цитированием
Старый 20.12.2006, 19:55   #10
Flash_
Пользователь
 
Аватар для Flash_
 
Регистрация: 19.12.2006
Сообщений: 91
По умолчанию

Где-где скорее всего лежит?))
Flash_ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер в С# kommunist Общие вопросы .NET 3 02.06.2008 12:11
таймер Романнн Общие вопросы Delphi 19 19.12.2007 15:33
таймер darkcoder Общие вопросы Delphi 5 06.12.2007 06:14
Таймер Stanislav Общие вопросы Delphi 3 26.11.2007 06:52
Таймер Blondinko Помощь студентам 6 23.10.2007 10:35