![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Мерцание картинки [D6, WinXP]
niki © (2005-01-15 01:40:00)Наверное многие сталкивались с проблемой мерцания картинки, например если у меня кортинка должна двигаться в 1/100 секунды то без мерцаний не обойтись. Я так понимаю по идее создается виртуальное изображение формы в памяти. Вот я надыбал две проце_дурки:
procedure BeginScreenUpdate(hwnd : THandle);
begin
if (hwnd = 0) then
hwnd := Application.MainForm.Handle;
SendMessage(hwnd, WM_SETREDRAW, 0, 0);
end;
procedure EndScreenUpdate(hwnd : THandle; erase : Boolean);
begin
if (hwnd = 0) then
hwnd := Application.MainForm.Handle;
SendMessage(hwnd, WM_SETREDRAW, 1, 0);
RedrawWindow(hwnd, nil, 0, DW_FRAME + RDW_INVALIDATE +
RDW_ALLCHILDREN + RDW_NOINTERNALPAINT );
if (erase) then
Windows.InvalidateRect(hwnd, nil, True);
end;
толи я не выхватую темы толи процеДУРЫ плохие. В общем кому интересно и кто может помогите.
Kerk (2005-01-15 22:20:00) [1]niki (15.01.05 14:27) [2]
первое правило анимации - не двигай TImage
niki (2005-01-15 22:14:00) [2]Ладно. Благодарствую за помощь. Я уже разобрался как эту ерунду делать. И прости programania что я неправильно написал твой ник выше.
programania (2005-01-15 22:07:00) [3]>niki (15.01.05 14:27) [2]
>В таймере пропиши движение картинки(пр. Image1.Left := Image1.Left + 1).
Это не движение картинки, это движение компонента Image1
Чтобы двигалась картинка и не мерцала нужно:
1.Запомнить фон в f:tBitmap.
2.Вывести фон в рабочий r:tBitmap;
3.Вывести картинку в r
4.Вывести r на экран
5.Изменить координаты вывода картинки
6.перейти на 2
все это при помощи canvas.draw(
dimaxx (2005-01-15 15:29:00) [4]Как альтернатива - использование directdraw surface. Тогда никаких мерцаний не бует.
niki (2005-01-15 14:27:00) [5]Овет на programmania. Паставь на форму картинку(я пробовал 48x48). Поставь таймер с интервалом 100. В таймере пропиши движение картинки(пр. Image1.Left := Image1.Left + 1). Компилиш и когда картинка движется то она мерцает. При интервале 100 мало заметно, тогда поставь интервал 10 или даже 1, и я уверен что картинка будет мерцать.
programania (2005-01-15 02:24:00) [6]>например если у меня кортинка должна двигаться в 1/100 секунды то без мерцаний не обойтись.
Найдите в форуме Media пример Test_BitBlt
в нем весь экран 1024*768 движется со скоростью 340 fps
и у меня на P800 MX400 мерцаний незаметно.