Текущий архив: 2004.10.24;
Скачать: CL | DM;
ВнизАнимация Найти похожие ветки
← →
Аним (2004-07-27 19:09) [0]Вопрос общего плана:
Как можно сделать анимацию наиболее плавно?
Чтоб при передвижении объекта не было мельканий (при стирании и рисовки заново)?
Но с учетом того, что задний фон динамически меняется..
нужно любое:
алгоритм на словах.. основные функции.. в общем, любые мысли..
кто то ведь с этим уже сталкивался..
спасибо.
← →
parovoZZ © (2004-07-27 19:13) [1]Смотря на чём рисовать. В любом случае надо делать буферизацию или использовать DirectDraw (как альтернатива для медленной графики - GDI).
← →
Аним (2004-07-27 19:24) [2]Рисую на канве.
Использую:
Canvas.Draw
Canvas.CopyRect
вывожу при помощи ч/б маски:
cmSrcAnd + cmSrcPaint
это GDI ?
я не знаком с этой терминалогией.. :((
а что еще для канвы можно?..
рисую все в памяти, потом вывожу..
но это же все не то........
ну на счет этого
> делать буферизацию
нельзя поподробней..
литры у меня нет..
может ссылку на статью.. или что-нибудь.....
а вообще, можно при помощи DirectDraw на канву?
← →
Knight © (2004-07-27 19:50) [3]Посмотри FastLib... для относительно простой графики самое оно... и ещё, мелькает у тебя скорее всего перерисовывающийся backgrount... смотри пример из в Delphi там есть.
← →
parovoZZ © (2004-07-27 21:34) [4]GDI: BitBlt(), StrechBlt(), TransparentBlt() ну и так далее. Это низкоурвневые функции WinApi для работы с графикой. Я так скринмэйта замутил, мерцаний - полный 0. Можно ещё здесь посмотреть http://delphigfx.mastak.ru/2d/012/2d_12.htm
← →
Egloo (2004-07-27 22:02) [5]Да, FastLib - отличная альтернатива работы с TBitmap...
Все же если будешь делать без FL, советую следовать следующим пунктам:
1. Обработка сообщения окна WM_ERASEBKGND: Посылается для стирания фона окна (например, при изменении его размеров). Постоянная перерисовка фона, а затем наложение на фон твоей картинки приводит к неприятному мерцанию... Дабы фон не перерисовывался необходимо в процедуре-обработчике сообщения возвратить 0.
Делается это след. образом:
- в секции private своего компонента или формы объявить процедуру-обработчик:
private
...
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
...
- в разделе реализации просто вернуть 0:
procedure TSomeForm1.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
Message.Result := 0;
end;
Теперь уже о закраске фона мы должны позаботиться сами (см.ниже)
2. Используйте двойную буферизацию выводимой графики: Машиной на последовательное наложение на форму, например, линий или залитых областей в реальном времени тратится определенное количество ресурсов, в следствие чего, заметны последовательность и мерцание... Чтобы этого избежать, необходимо все (включая фон, т.к. мы переопределили его дефолтную закраску) рисовать на битмапе в памяти и затем уже выводить полученную картинку на экран:
procedure TSomeForm.Paint;
var
memoryBitmap: TBitmap;
begin
inherited;
memoryBitmap := TBitmap.Create; // создаем битмап в памяти
try
memoryBitmap.Height := ClientRect.Bottom;
memoryBitmap.Width := ClientRect.Right;
// Рисуем фон
memoryBitmap.Canvas.Brush.Color := Self.Color;
...
... что-то, что нам необходимо нарисовать ...
...
// Копируем memoryBitmap на экран
Canvas.CopyRect(ClientRect, memoryBitmap.Canvas, ClientRect);
finally
memoryBitmap.Free; // уничтожаем временную картинку
end;
end;
Удачи! :)
← →
Egloo (2004-07-27 22:16) [6]Кстати, а почему закрыли кладовку? :/
← →
parovoZZ © (2004-07-27 23:19) [7]Сейчас последует вопрос: а что такое FastLib? Отвечаю: http://delphigfx.mastak.ru/libs.htm , в самом низу страницы. А по-моему и GDI не плохо справляется.
← →
Knight © (2004-07-28 02:06) [8]
> 1. Обработка сообщения окна WM_ERASEBKGND:
Можно и без этого, используя разные Инвалидейты...
← →
parovoZZ © (2004-07-28 02:46) [9]Ну на самом деле всё зависит от скорости анимации. Я обходился без WM_ERASEBKGND, и всё работало без мерцаний. Просто BitBlt рисует на контексте и забыват про это до следующей перерисовки. А перерисовка просто тупо накладывается на предыдущую, вот Вам и отсутствие мерцаний.
← →
Аним (2004-07-28 13:02) [10]Спасибо за ссылки.. читаем..
А вот ето:
> parovoZZ © (27.07.04 21:34) [4]
> GDI: BitBlt(), StrechBlt(), TransparentBlt() ну и так далее.
> Это низкоурвневые функции WinApi для работы с графикой.
> Я так скринмэйта замутил, мерцаний - полный 0.
моно хочь exe на почту.. посмотреть хочется..
← →
Аним (2004-07-28 15:05) [11]Почитал..
Оказывается я и делал вывод с бвойной буферизацией с исп. обычной маски (не программной)...
но это всек тому как быстрее, грамотнее рисовать кадры..
а как восстанавливать фон, чтобы поставить след. кард?
каким способом?
но нельзя хранить фон в буфере, а потом дважды буферизировать и поверх всего опять ставить (не восстанавливая того, куда нарисовали), поскольку фон за это время мог уже измениться (по сравнению с тем, что в буфере)...
и этот буфер (с фоном) надо обновлять перед тем, как исп. двойную буферизацию для след. кадра...
вот я и писал
> с учетом того, что задний фон динамически меняется..
а?
p.s.
всвязи с этим
2 parovoZZ © (27.07.04 21:34) [4]:
может кусок сурсника по этой теме.. ?
;D
← →
parovoZZ © (2004-07-28 21:08) [12]А по-моему для таких целей не следует использовать канвас, а обращаться напрямую через дескриптор компонента. Например, для формы:
var
DC : HDC;
begin
DC := GetDC (Form1.Handle);
end;
После чего можно непосредственно рисовать на форме, но все перерисовки должна брать на себя программа. Геморно, но цена: отсутствие мерцаний.
Создай пустую форму, на неё кинь таймер, интервал в принципе не критичен, можешь поставить 10-ку. Скопируй вот этот код (на скорую руку, поэтому замечания от мастеров только по делу):
unit Unit1;
interface
uses
Windows, Messages, Forms, Classes, ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
k : integer;
Picture1, Picture2 : cardinal;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
var
DCBuffer : HDC;
DCForm : HDC;
DCImage : HDC;
BufferBitmap : HBitmap;
begin
if k > 500 then k := 1 else inc (k);//Для анимации
DCForm := GetDC (Form1.Handle);//Берём дескриптор формы
BufferBitmap := CreateCompatibleBitmap (DCForm, 500, 130);//Создаём совместимую с контекстом формы картинку в памяти (наш буфер)
DCImage := CreateCompatibleDC (DCForm);//создаём дополнительные дескрипторы
DCBuffer := CreateCompatibleDC (DCForm);
SelectObject (DCBuffer, BufferBitmap);//Выбираем в созданные
SelectObject (DCImage, Picture1);//дескрипторы картинки
BitBlt (DCBuffer, 5, 0, 500, 130, DCImage, 0, 0, SrcCopy);//В памяти сперва рисуем фон
SelectObject (DCImage, Picture2);
BitBlt (DCBuffer, k + 5, 0, 500, 130, DCImage, 0, 0, SrcCopy);//затем также в памяти рисуем спрайт
BitBlt (DCForm, k + 5, 0, 500, 130, DCBuffer, 0, 0, SrcCopy);//После чего всё переносим из памяти на форму
SelectObject (DCBuffer, BufferBitmap);
DeleteObject (BufferBitmap);
DeleteDC (DCBuffer);
DeleteDC (DCImage);
ReleaseDC (Form1.Handle, DCForm);//Ну и удаляем всё к чёрту
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Picture1 := LoadImage (0, "fon.bmp", Image_Bitmap, 0, 0, LR_LOADFROMFILE or LR_CREATEDIBSECTION);//загружаем фон (размер не очень важен; у меня 640*480)
Picture2 := LoadImage (0, "Sprite.bmp", Image_Bitmap, 0, 0, LR_LOADFROMFILE or LR_CREATEDIBSECTION);//загружаем спрайт (у меня 96*96)
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteObject (Picture1);
DeleteObject (Picture2);
end;
end.
Картинки должны лежать в той же папке, что и EXE, названия файлов должны совпадать с теми, которые указаны в функции BitBlt.
В примере движется фон, но поверх него выводится спрайт, который тоже движется. На моём компе с WinXP мерцаний замечено не было совсем. В принципе по началу может показаться всё сложным, но после некоторой практики всё станет понятным.
← →
Огромное Кулясищще © (2004-07-28 21:33) [13]2 parovoZZ:
>В примере движется фон, но поверх него выводится спрайт, который тоже движется. На моём компе с WinXP мерцаний замечено не было совсем. В принципе по началу может показаться всё сложным, но после некоторой практики всё станет понятным.
А по-моему о мерцаниях речь не шла. BitBlt что с канвой, что без канвы - практически одно и то же. А вот когда вывод подвешен на таймер - о плавности говорить не приходится.
← →
parovoZZ © (2004-07-28 21:56) [14]Зато речь шла о мельканиях, что одно и тоже в данном контексте. Не нравится таймер, можно использовать DirectDraw. Там всё быстро и плавно. А плавность - плюс минус один пиксель, плавнее нельзя по определнию.
← →
Огромное Кулясищще © (2004-07-28 22:58) [15]>Зато речь шла о мельканиях, что одно и тоже в данном контексте.
Мелькание и плавность ну явно разные понятия. Можно на тех же BitBlt выводить изображение без мерцаний, но при этом не слишком быстро - и будет казаться, что объект движется рыками. Или же если во время анимации меняется загрузка процессора, то анимация ускоряется или замедляется. Этого тоже можно избежать.
>Не нравится таймер, можно использовать DirectDraw. Там всё быстро и плавно.
Если в DirectDraw использовать TTimer, то всё будет быстро, но никак не плавно. Кроме таких категоричных действий, можно использовать OnIdle, мультимедийный таймер или потоки.
>А плавность - плюс минус один пиксель, плавнее нельзя по определнию.
Увы, можно. Надеюсь, рисунок тебя убедит:
http://www.hot.ee/gelphi/pixel1.png
← →
Аним (2004-07-28 23:14) [16]Да, класс..
Нет, сложным вовсе не показалось.. )) просто с этим столкнуся впервые.. и литры нет..
а тут.. отличный пример! (еще и напрямую, через дискрипторы)
бошое спасибо.
я достиг такого же эффекта (не мерцания), но не напрямую (на канве рисовал).
Единственное:
В твоем примере все рисуется в буфере и выводится потом через дискриптор формы на нее же..
Т.е. инфа, кот. ранее была на форме, после вывода твоей графики, потеряна.
Я же говоря о динамическом фоне, я имел ввиду то, что до этого (вывода твоего спрайта) на форме кто-то мог что-то выводить сам.. да хоть кружок..
а твое все его затрет.
говоря о динамическом фоне, я имел ввиду то, что фон - не картинка, а чужой дескриптор, кот. я не контролирую.... он чужой.
он меняется и статически висеть в буфере у меня не может...
т.е. я полюбэ болжен восстанавливать его "чистоту" и вновь запоминать перед последующей прорисовкой.... я же не могу заляпать его своим спрайтом... )
поэтому и заинтересовал твой screenmate.. ведь он обязан не затирать "чужое".
Как это у тебя делается?!
или ты что-то иное под screenmate имеешь ввиду, не передвигающийся спрайт на экране (чужом дискрипроре)?!
2 Огромное Кулясищще © (28.07.04 22:58) [15]
Никто и не путал мерцание с плавностью передвижения..
Вопрос звучал
> Чтоб при передвижении объекта не было мельканий (при стирании
> и рисовки заново)?
> Но с учетом того, что задний фон динамически меняется..
и о том и о другом, как выяснилось.. :).
Но на тот момент я думал именно о мерцании..
Плавность также оч. важный момент.
У тебя есть мысли, - выскажи.. что за споры.. )
> объект движется рыками
Как и какими средствами (через что, по-простому) можно добиться плавности как на твоей png?..
На счет этого все понятно:
> меняется загрузка процессора, то анимация ускоряется или
> замедляется
> можно использовать OnIdle, мультимедийный таймер или потоки.
← →
parovoZZ © (2004-07-28 23:29) [17]А кто мешает перед перерисовкой формы скинуть её содержимое в какой-нибудь буфер?
А скринмэйт (экранный помошник) это всего-лишь окно, которое движется по экрану, а перерисовка окон, находящегося под ним, это забота вынды. По крайней мере, я ей так приказал делать.
← →
parovoZZ © (2004-07-28 23:39) [18]Да, я чего ещё подумал. В моём скринмэйте нет буферизации, но он всё равно не мерцает при перерисовке. Правда он написан полностью на апях. А вот попробовал убрать из вышеприведённого кода буфер, появились мерцания. Видимо VCL сам себе на уме.
А по поводу плавности: пиксель - это минимальная еденица отображения информации на мониторе. Хотим мы этого или не хотим, но перемещатся спрайт всё равно будет дискретно, но, как видно из рисунка, мы можем обмануть глаз и сделать перемещение как-бы плавным.
← →
Огромное Кулясищще © (2004-07-28 23:40) [19]2 Аним:
>Рисую на канве.
Использую:
Canvas.Draw
Canvas.CopyRect
вывожу при помощи ч/б маски:
cmSrcAnd + cmSrcPaint
Ты мне скажи, что ты делаешь, чтобы у тебя мерцало. Не допираю никак.
>Как и какими средствами (через что, по-простому) можно добиться плавности как на твоей png?..
Нужно применить сглаживание к пикселю (antialiase). Грубо говоря, чем больше площадь лежит на одном из четырёх занимаемых пикселей, тем непрозрачней цвет.
← →
Огромное Кулясищще © (2004-07-28 23:43) [20]>Видимо VCL сам себе на уме.
Видимо без буфера VCL делает то, что ты ему задаёшь делать, а именно: нарисовать на окне, обновить окно, нарисовать на окне, обновить окно.
← →
parovoZZ © (2004-07-29 11:32) [21]На этом сайте лежит скринмэйт Joffa, там картинка рисуется на Image-е, при этом заметны мерцания, я же делаю всё с помощью апей. Ничего не мерцает. В обоих случаях буфер не применяется.
← →
Аним (2004-07-29 17:52) [22]
> А кто мешает перед перерисовкой формы скинуть её содержимое
> в какой-нибудь буфер?
Так я на ее dc свою графику вывожу. Да, могу ее запомнить перед своим выводом, но после мне как затереть то, что я поверх нарисовал?! Поставить поверх то, что запомнил?! не-е.. это - устарелая инфа.. ее тоже надо обновить..
Ну и что же, не вызывать же инвалидейт?..
Вот и будет:
> без буфера VCL делает то, что ты ему задаёшь делать, а именно:
> нарисовать на окне, обновить окно, нарисовать на окне, обновить окно.
> А скринмэйт (экранный помошник) это всего-лишь окно, которое
> движется по экрану, а перерисовка окон, находящегося под
> ним, это забота вынды. По крайней мере, я ей так приказал
> делать.
Т.е. что, ты на канве своего окна рисуешь етого помошника, да?
спрайтового персоонажа..
Но оформлено это у тя как? в своем окне ты убрал границы и заместо фона окна ставишь тот фон, что под ним?! или как..
Как ты добился эффекта прозрачности, того, как-будто спрайт движется по столу?..
> Ты мне скажи, что ты делаешь, чтобы у тебя мерцало. Не допираю
> никак.
)) Так нет, мерцания нет (при статичном backgroung-е)..
Теперь остались только лишь скачки с пикселя на следующий....
Как я понял, от этого можно избывиться своеобразной размытостью границ спрайта на 1px?..
> Нужно применить сглаживание к пикселю (antialiase). Грубо
> говоря, чем больше площадь лежит на одном из четырёх занимаемых пикселей, тем непрозрачней цвет.
antialiase? и что это? а ссылок, что почитать по этому нет?..
хоть какие-нить keywords чтоб в хелпе глянуть..
> На этом сайте лежит скринмэйт
Интересно, где же.. кладовка почему-то закрыта..
В каком разделе?..
← →
Огромное Кулясищще © (2004-07-29 18:00) [23]>antialiase? и что это? а ссылок, что почитать по этому нет?..
хоть какие-нить keywords чтоб в хелпе глянуть..
Ссылок кинуть могу, но только по требованию. Можешь попробовать поработать с Graphic32 - там это всё реализовано, собственно, оттуда и пример.
← →
Аним (2004-07-29 18:06) [24]что-то я ударился в screenmates.. ))
Вот:http://grin.bip.ru/Progr/scmpoo.zip
барашек, кот. бегает по экрану..
качественный китайский screenmate..
его действительно рисуют в отдельним своем окне, а не выводят на чужой dc..
Но как тогда решена проблема с фоном?.. на котором его выводят.. он же постоянно меняется..
не важно двойной буферизацией или как-то еще..
с выводом спрайта вопросов нет..
а откуда они берут фон для использования пусть той же двойной буферизации на дискрипторе своего окна?.. это же фон экрана..
← →
Аним (2004-07-29 18:08) [25]
> Ссылок кинуть могу, но только по требованию.
Требую.. ))
← →
Аним (2004-07-29 18:12) [26]Кстати говоря,
http://www.delphimaster.ru/cgi-bin/forum.pl/forum.pl/?id=1090418922&n=7
> Огромное Кулясищще © (21.07.04 20:29) [8]
> > Как можно рисовать быстрее GDI?
>
> www.g32.org см. Graphic32
>
> > с помощью чего рисовать-то
>
> Вывод пикселя через прямоугольник 1х1. Попиксельно рисуй
> примитивы.
Ды?
← →
Огромное Кулясищще © (2004-07-29 18:41) [27]>Но как тогда решена проблема с фоном?.. на котором его выводят.. он же постоянно меняется..
Через регионы.
← →
Огромное Кулясищще © (2004-07-29 18:43) [28]>Требую.. ))
http://www.efg2.com/Lab/Library/Delphi/Graphics/Algorithms.htm
листай вниз до antialiasing
>Ды?
Именно.
← →
parovoZZ © (2004-07-29 19:11) [29]Извините, сижу в опере, потому на все вопросы ответы в кучу...
По скринмэйту: обрезаю форму регионом (можно сделать хоть дырку в окне).
Скринмэйт лежит где-то здесь, игрушка называется Joffa http://delphigfx.mastak.ru/game3.htm
to Аним:
могу лишь только посоветовать освоить DirectDraw; но всё-таки я не понял, что ты хочешь делать: рисовать в своём окне или рисовать в чужом? И что значит информация устарела? Это то, что при воспроизведении из буфера она будет накладываться на обновившуюся картинку? Так кто мешает запомнить картинку в этом же самом буфере и потом воспроизвести на экран?
BitBlt с флагом SRCCOPY просто накладывает новое изображение на старое, причём старое безвозвратно теряется.
← →
Аним (2004-07-29 19:24) [30]
> Через регионы.
Сомнительно..
Это самое простое, что можно подумать при попытке реализовать простейший screenmate..
но разве в паузу между изменением региона окна и выводом на измененный регион графики не произойдет мелькания?..
Или просто при изменении региона...
Тут никакая буферизация не поможет...
У них мелькания нет..
Правда и вывод не плавный.. с большим шагом..
Хотя надо попробовать..
> http://www.efg2.com/Lab/Library/Delphi/Graphics/Algorithms.htm
> листай вниз до antialiasing
спасибо, смотрим..
← →
Аним (2004-07-29 20:36) [31]
> могу лишь только посоветовать освоить DirectDraw;
все впереди.. я тока начал разбираться.. )
> но всё-таки я не понял, что ты хочешь делать: рисовать в
> своём окне или рисовать в чужом?
сам заметил, что сильно отклонился от сабжа.. в конце уже говорил о чужом окне..
> BitBlt с флагом SRCCOPY просто накладывает новое изображение
> на старое, причём старое безвозвратно теряется.
Да, с этим все давно ясно..
> И что значит информация устарела? Это то, что при воспроизведении
> из буфера она будет накладываться на обновившуюся картинку?
> Так кто мешает запомнить картинку в этом же самом буфере
> и потом воспроизвести на экран?
Сейчас, разберусь со всем.. что-то уже сам запутался.. ))
А все потому, что уже не решаю конкретную задачу, а просто пробую.. т.с. изучаю..
← →
Аним (2004-07-29 20:44) [32]Блиин.. а что, DelphiX тока для пятых делфей?
Выше нет негде?
← →
Огромное Кулясищще © (2004-07-29 20:47) [33]Косячки курить - это плохо. Так вот, по делу. Если менять реагион тогда, когда надо - никакие мелькания не возникнут.
← →
parovoZZ © (2004-07-29 22:05) [34]> Если менять реагион тогда, когда надо - никакие мелькания не возникнут.
А подробнее можно? Сейчас попробую. О результатах доложу.
← →
Огромное Кулясищще © (2004-07-29 22:32) [35]>А подробнее можно? Сейчас попробую. О результатах доложу.
Меняй, например, в OnPaint.
← →
Аним (2004-07-29 22:52) [36]Я менял по таймеру и использовал компонент TDIBFormShaper...
(для получения HRGN с исключением нужного цвета из битмапа)
мельканий не заметил...
p.s.
я предпологал, что когда у формы изменится регион, а новая картинка еще не наложится, этот момент будет заметен..
ан, нет.. ))
хотя может от загрузки ЦП это немного зависит..
← →
parovoZZ © (2004-07-29 23:17) [37]
> но разве в паузу между изменением региона окна и выводом
> на измененный регион графики не произойдет мелькания?..
>
> Или просто при изменении региона...
> Тут никакая буферизация не поможет...
Если отлавливать необходимые сообщения, то мельканий можно избежать, что я и сделал. Но я ненавижу VCL. Причин много, но не об этом речь.
> Огромное Кулясищще © (29.07.04 22:32) [35]
> >А подробнее можно? Сейчас попробую. О результатах доложу.
>
> Меняй, например, в OnPaint.
Уже сказал.
> Аним (29.07.04 20:44) [32]
> Блиин.. а что, DelphiX тока для пятых делфей?
> Выше нет негде?
Есть, у меня для 6-ой стоит на 7-ой делфе. Но не советую использовать из-за примитивности. Я себе поставил только лишь чтобы сорцы чужие изучать.
> о результатах доложу
Докладываю: в ходе испытаний было выяснено, что действительно, независимо как, независимо на чём, без буфера мелькания были, есть и будут. Вывод: надо делать буфер.
Но я не понял: почему же Joffa мелькает, а мой скринмэйт нет? Хотя оба они используют регионы.
//Своего скринмэйта пока не выкладываю, доделываю интерфейс и физику надо подправить.
← →
Огромное Кулясищще © (2004-07-29 23:34) [38]>Докладываю: в ходе испытаний было выяснено, что действительно, независимо как, независимо на чём, без буфера мелькания были, есть и будут. Вывод: надо делать буфер.
Либо выкладывай код, либо читай начало поста Огромное Кулясищще © (29.07.04 20:47) [33].
← →
Аним (2004-07-30 00:16) [39]
> независимо как, независимо на чём, без буфера мелькания
> были, есть и будут. Вывод: надо делать буфер.
Какой же буфер при работе с регионами?! Если ты о двойном, то он, понятно, нужен за тем, чтоб не было мельканий при анимации с конкретным фоном..
А тут.. ведь регион подрезает окно по границам изображения, после чего все что нужно - тупо наложить поверх свою графику..
Фон автоматически отпадает - о нем заботиться не надо..
а в буфер что загонять?! ну еси тока эту "однослойную" графику..
или не так?
p.s. код joffa не смотрел, но там точно ети регионы. Да он и всегда поверх остальных окон..
В овцах - точно нет (не регионы).
там как раз работа с дискриптором рабочего стола (это сложнее)..
берут кусочек его перед тем как себя нарисовать.. и используют как фон..
обновляют только когда поверх их окна проходит чужое или при получении фокуса своего..
при этом обновлении жуткое мерцание: себя скрывают, берут фон и опять себя рисуют..
это я так.. )
при работе с регионами - ну ессественно мельканий (заметных) нет..
без всяких там буферов.. ))
← →
MegaVolt (2004-07-30 09:58) [40]Вот решил выложить пример отрисовки с мерцание и без. Простенько рисую на канве. Без мерцания исспользую двойную буферизацию :) http://webfile.ru/34572
Страницы: 1 2 вся ветка
Текущий архив: 2004.10.24;
Скачать: CL | DM;
Память: 0.59 MB
Время: 0.041 c