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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 07.07.2008, 22:05   #11
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
- т.е., когда я заменю этот квадратик на рисунок .bmp или .jpg, то подергивания должны исчезнуть?
я думаю да, но еще может быть причина в неправильной смене кадра
Цитата:
- пример использования можно синтаксис чтобы понять
можно, но завтра, кстати на два верхних вопроса (2 zetrix, 2 BOBAH13) тоже ответ получишь
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 07.07.2008 в 22:08.
mutabor вне форума
Старый 07.07.2008, 22:21   #12
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Можно на канве выводить. У меня файл 6,5 метров бегает по форме и ничего - приемлимо.
Кидаем на форму таймер с интервалом 10 (можно и больше - кому как), создаём файл Fon.bmp и всё.
Вот как раз и получим
Цитата:
выводи вообще без паузы
Цитата:
движение и прочую логику нужно на таймер вешать
Код:
var
  Form1: TForm1;
  b:TBitMap;
  xx,yy,
  xxx,yyy: integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
    xx:=0;yy:=0;
    b:=TBitMap.Create;
    b.pixelformat:=pf16bit;
    b.LoadFromFile('Fon.bmp')
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  xxx:=xxx+xx;yyy:=yyy+yy;
  if xxx>0 then xxx:=0;
  if yyy>0 then yyy:=0;
  if xxx<form1.ClientWidth-b.Width then
     xxx:=form1.ClientWidth-b.Width;
  if yyy<form1.ClientHeight-b.Height then
     yyy:=form1.ClientHeight-b.Height;
  form1.Canvas.Draw(xxx,yyy,b)
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=37 then xx:=5;
  if key=39 then xx:=-5;
  if key=38 then yy:=5;
  if key=40 then yy:=-5
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  xx := 0;
  yy := 0
end;

end.
Не самое лучшее решение, но это только пример
eoln вне форума
Старый 07.07.2008, 23:33   #13
Роман Радер
Форумчанин
 
Аватар для Роман Радер
 
Регистрация: 16.12.2006
Сообщений: 859
По умолчанию

Канва это не выход. Если игру уж делать, то можно OpenGL.
Кстати на счет GetTickCount, этот системный таймер еще хуже чем TTimer, потому что у него шаг не 1 мсек а 15мсек. тоесть не 1000 в секунду, а ~66
Роман Радер вне форума
Старый 08.07.2008, 00:13   #14
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Кстати на счет GetTickCount, этот системный таймер еще хуже чем TTimer
С откуда такие данные ? Вообще ужас какой то... Насколько мне известно она намного точней чем TTimer ( WM_TIMER ). И уж точно тут вы не правы
Цитата:
1 мсек а 15мсек
Вот пример
Код:
var
  k: DWORD;
begin
// какой то код
k := Windows.GetTickCount;
while (Windows.GetTickCount - k < 5 * 1000) do;
// далее код начнеться выполняться через 5 секунд 5 умножить на 1000, т.е. 5000 ммсек. И что это за ерунда выше описана ( без обид ) я сам не понял...
BOBAH13 вне форума
Старый 08.07.2008, 00:39   #15
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

BOBAH13, Роман Радер прав - счетчик ограничен разрешающей способностью системного таймера, это задокументировано и можно проверить например так
Код:
a := gettickcount;
sleep(5);
b := gettickcount;
application.messagebox(pchar(inttostr(b-a)), '')
Как видим прошло не 5 мс, а больше, но для 25-ти кадров в сек хватает с лихвой.

Пользуйте QueryPerfomanceCounter()

Последний раз редактировалось eoln; 08.07.2008 в 00:41.
eoln вне форума
Старый 08.07.2008, 01:20   #16
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2 eoln - я на OpenGl делаю

Цитата:
Пользуйте QueryPerfomanceCounter()
- это что такое? ))

2 Роман Радер - насчет OpenGl согласен.

Так вот я не совсем понял...
Если мне нужно, чтобы 10 раз в секунду что-то происходило (например, моя процедура с названием MyProcQuads), то как это написать с помощью gettickcount?

Пример мне нужен
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума
Старый 08.07.2008, 01:52   #17
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Если 10 раз в секунду надо, то лучше TTimer оставить - хлопот меньше. Правда бывает что формы нет и таймер кинуть некуда во время разработки, то тогда уж создаём свой таймер на идеи сообщений Windows

используем WM_TIMER, читаем документацию по Api: SetTimer и KillTimer,
тут и будет аналог gettickcount
http://www.softhelp.ru/delphi/class/...reate_mm_timer
http://programmersforum.ru/showthrea...light=WM_Timer
eoln вне форума
Старый 08.07.2008, 02:33   #18
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Интересно... и чем же отличаеться TTimer от WM_TIMER ))
Ring0Sn вне форума
Старый 08.07.2008, 02:46   #19
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Ring0Sn, читай внимательнее
Цитата:
бывает что формы нет и таймер кинуть некуда
eoln вне форума
Старый 08.07.2008, 03:11   #20
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Ring0Sn, читай внимательнее
Уважаемый, это вы "читай внимательнее", я неспрашивал что бывает, а в чем отличия TTimer и wm_Timer
Я вот всегда думал что это одно и тоже и не являеться аналогом GetTickCount
Код:
procedure TTimer.WndProc(var Msg: TMessage);
begin
  with Msg do
    if Msg = WM_TIMER then
      try
        Timer;
      except
        Application.HandleException(Self);
      end
    else
      Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
end;

Последний раз редактировалось Ring0Sn; 08.07.2008 в 03:26.
Ring0Sn вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как задать интервал между датами в фильтре Леон Microsoft Office Access 2 22.10.2008 11:16
Как поменять интервал между буквами в поле Acces? xruss Microsoft Office Access 9 08.05.2008 11:32
использование таймера KancJler Помощь студентам 13 19.04.2008 01:13
Время таймера в проге, -программно остановать. Air Общие вопросы Delphi 6 02.02.2008 18:49
межстрочный интервал в excel KorvinZ Microsoft Office Excel 2 16.01.2008 17:40