>>И еще вопрос, вы прямо сразу на канве которая отображается рисуете? Без использования буфера?
Да, без использования буфера. Чем предпочтительней использовать буфер? Можете дать ссылку на пример использования буфера? Вот как построено рисование у меня.
На форму размешаю объект Image.
Создаю таймер, в коде которого прописываю:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
// Стирает
Image1.Canvas.Brush.Color :=clWhite;
Image1.Canvas.Rectangle(i-10,30,i+20,40);
// Рисует
Image1.Canvas.Brush.Color := clRed;
Image1.Canvas.Rectangle(i,30,i+20,40);
i:=i+3;
if i>500 then Timer1.Enabled:=false;
end;
Таким образом на экране прорисовывается прямоугольник размером 20х10 пикселей.
Прямоугольник двигается вперед, за счет срабатывания таймера.
Чтобы задать реальную скорость движения и реальные габариты автомобиля примем следующее:
1. 5 пикселей = 1 метру (если автомобиль 4х2 метра, то на экране это прямоугольник размером 20х10 пкс).
2. Чтобы автомобиль ехал со скоростью 10 м/с (36 км/ч), нужно ежесекундно сдвигать автомобиль на 50 пикселей, чтобы движение было плавным будем сдвигать каждые 1/10 секунды на 5 пикселей.
Чтобы отсчитывать интервалы равные 1/10 секунды можно применить Timer, для этого свойство Interval устанавливаем равным 100 миллисекундам.
Вроде бы все хорошо, НО таймер интервал отсчитывает НЕВЕРНО Когда в реальности проходит минута, таймер успевает отсчитать только 55 секунд. В итоге скорость движения автомобиля на экране не совпадает с тем что происходит в реальности.
Что предложите использовать вместо таймера, чтобы точность вычисления временных интервалов была высокой?