![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите пожалуйста [Delphi, Windows]
Катя © (2002-12-02 16:09:00)Заставили меня написать программу (игру) для универа. Все дело в том, что нужно использовать стандартный набор компонентов Delphi5, то есть DelphiX не пройдёт ;). Так вот, написала примитивную игру (как просили), в которой всё рисуется на form1.canvas с каждым тактом таймера. Как и следовало ожидать, происходит мигание графики. Где то я видела как можно это преодолеть, только вот где --- не помню. :(
Может кто знает и поможет ?
MBo (2002-12-02 17:54:00) [21]это пример для случая, когда тебе нужно заполнить битмап (buffer) кусками других битмапов. Что именно неясно?
Опиши задачу чуть подробнее -что и как рисуешь.
Катя (2002-12-02 17:50:00) [22]Уловила :)
Не уловила только вот это
procedure TFrom1.UpdateFrame;
begin
...
Bitblt(Buffer.Canvas.Handle, ...); // Рисуем все что нужно в буфер
...
Bitblt(Buffer.Canvas.Handle, ...);
...
Bitblt(Self.Canvas.Handle, ...., Buffer.Canvas.Handle, .., SRCCOPY);
end;
MBo (2002-12-02 17:15:00) [23]doublebuffered:=true еще для формы установи, но здесь это вряд ли повлияет.
Ты уловила, что нужно ВСЕ рисовать на одном битмапе, потом его копировать на форму?
Катя (2002-12-02 16:58:00) [24]Может всё же кто ни будь пример вышлет ;) Буду очень рада...
Мой е-майл:KAT9I@mail.ru
Катя (2002-12-02 16:34:00) [25]Кстати я именно так и вывожу графику (Canvas.Draw(x,y,Bitmap)), всё равно мигает
Катя (2002-12-02 16:32:00) [26]Мой е-майл:KAT9I@mail.ru
MBo (2002-12-02 16:28:00) [27]Если, несмотря на пример Mirovodin, есть трудности в применении функции WinAPI BitBlt, можно воспользоваться методом Canvas.Draw(0,0,Bitmap)
Axis_of_Evil (2002-12-02 16:24:00) [28]1)таймер, как TThread
2)см. help "BitBlt"
слушай MBo, он умный
Припиши тут свой mail, пришлю пример
Mirovodin (2002-12-02 16:23:00) [29]Организуем Buffer (TBitmap);
Процедура прорисковки всего добра выглядит след-м образом:
procedure TFrom1.UpdateFrame;
begin
...
Bitblt(Buffer.Canvas.Handle, ...); // Рисуем все что нужно в буфер
...
Bitblt(Buffer.Canvas.Handle, ...);
...
Bitblt(Self.Canvas.Handle, ...., Buffer.Canvas.Handle, .., SRCCOPY);
end;
Все Bitblt делаем на невидимый буфер Buffer а потом кидаем его на Canvas формы.
Катя (2002-12-02 16:17:00) [30]> MBo:
Я не совсем поняла что вы посоветовали... прошу Вас, поподробнее?
MBo (2002-12-02 16:12:00) [31]рисовать на bitmap, потом Bitblt его на canvas