Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.21;
Скачать: CL | DM;

Вниз

мерцание экрана при передвижении объектов   Найти похожие ветки 

 
Марина   (2003-04-23 15:48) [0]

Здравствуйте!
У меня возникла следующая проблема: при передвижении графических
объектов по фону возникает неприятное мерцание.
Если задать передвикающиеся объекты типом TImage, то мерцают
они сами, если организовать их в качестве экземпляров типа ТBitmap и перерисовывать
каждый раз фон (в нем достаточно сложная картинка),то начинают
мигать и передвигающиеся объекты и фон. Не помогает и подражание
двустраничному режиму, когда передвигающиеся объекты рисуются сначала на "невидимом" фоне, а затем вместе с ним выводятся на экран. Возможно, кто-то уже с этим сталкивался...Пожалуйста, подскажите, как же можно справиться с мерцанием. Заранее
благодарна.


 
Skier ©   (2003-04-23 15:55) [1]

TForm.DoubleBuffered := True;


 
Марина   (2003-04-23 16:19) [2]

Не помогает :(


 
Skier ©   (2003-04-23 16:28) [3]

LockWindowUpdate ?


 
Марина   (2003-04-23 16:35) [4]

К сожалению не поняла (это моя 1-я прога) Объясните пожалуйста


 
Skier ©   (2003-04-23 16:54) [5]

Код покажи...как делаешь...


 
Марина   (2003-04-23 17:08) [6]

unit ObjectFi;
Interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, jpeg, ExtCtrls;
type
tdd=record
dir:byte; pos:array[1..2] of byte;
aged:byte;
die:boolean;
calv:boolean;
end;
TFishes=class
x,y,dx,dy,size:integer;
speed:boolean;
smile:byte;
oblichie:Timage;
constructor Create(nx,ny,ndx,ndy:integer);
function Getx:integer; overload; virtual;
function Gety:integer; overload; Virtual;
function Getfutposx:integer; overload; Virtual;
function Getfutposy:integer; overload; Virtual;
function Getsize:integer; overload; Virtual;
destructor Done; overload; Virtual;
procedure MoveTo;overload; Virtual;
end;
TSmallK=class(TFishes)
constructor Create(nx,ny,ndx,ndy:integer);
procedure BeEaten; overload; Virtual;
procedure Whatdo(news:tdd);
end;
TKarasM=class(TSmallK)
constructor create(nx,ny,ndx,ndy:integer);
procedure Death;
procedure Whatdo(news:tdd);
end;
TKarasW=class(TKarasM)
constructor Create(nx,ny,ndx,ndy:integer);
procedure PutCaviar;
procedure Whatdo(news:tdd);
end;
TSmallSh=class(TFishes)
constructor Create(nx,ny,ndx,ndy:integer);
procedure WaitForKill;
procedure Whatdo(news:tdd);
end;
TShyukaM=class(TSmallSh)
constructor create(nx,ny,ndx,ndy:integer);
procedure Death;
procedure Whatdo(news:tdd);
end;
TShyukaW=class(TShyukaM)
constructor create(nx,ny,ndx,ndy:integer);
procedure PutCaviar;
( news:tdd) unit ObjectFi;
Interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, jpeg, ExtCtrls;
type
tdd=record
dir:byte; pos:array[1..2] of byte;
aged:byte;
die:boolean;
calv:boolean;
end;
TFishes=class
x,y,dx,dy,size:integer;
speed:boolean;
smile:byte;
oblichie:Timage;
constructor Create(nx,ny,ndx,ndy:integer);
function Getx:integer; overload; virtual;
function Gety:integer; overload; Virtual;
function Getfutposx:integer; overload; Virtual;
function Getfutposy:integer; overload; Virtual;
function Getsize:integer; overload; Virtual;
destructor Done; overload; Virtual;
procedure MoveTo;overload; Virtual;
end;
TSmallK=class(TFishes)
constructor Create(nx,ny,ndx,ndy:integer);
procedure BeEaten; overload; Virtual;
procedure Whatdo(news:tdd);
end;
TKarasM=class(TSmallK)
constructor create(nx,ny,ndx,ndy:integer);
procedure Death;
procedure Whatdo(news:tdd);
end;
TKarasW=class(TKarasM)
constructor Create(nx,ny,ndx,ndy:integer);
procedure PutCaviar;
procedure Whatdo(news:tdd);
end;
TSmallSh=class(TFishes)
constructor Create(nx,ny,ndx,ndy:integer);
procedure WaitForKill;
procedure Whatdo(news:tdd);
end;
TShyukaM=class(TSmallSh)
constructor create(nx,ny,ndx,ndy:integer);
procedure Death;
procedure Whatdo(news:tdd);
end;
TShyukaW=class(TShyukaM)
constructor create(nx,ny,ndx,ndy:integer);
procedure PutCaviar;
procedure Whatdo(news:tdd);
end;



 
Марина   (2003-04-23 17:09) [7]

2-я часть кода
*************
Implementation
uses Unit3;
constructor TFishes.Create(nx,ny,ndx,ndy:integer);
begin Oblichie:=TImage.Create(Form3);
Oblichie.Parent:=Form3;
oblichie.left:=nx; oblichie.top:=ny;
oblichie.Transparent:=true;
oblichie.visible:=true;
end;
function TFishes.Getx:integer;
begin
getx:=x;
end;
function TFishes.Gety:integer;
begin
gety:=y;
end;
function TFishes.Getfutposx:integer;
begin
getfutposx:=oblichie.left+dx;
end;
function TFishes.Getfutposy:integer;
begin
getfutposy:=oblichie.top+dy;
end;
function Tfishes.Getsize:integer;
begin
getsize:=size;
end;
Destructor TFishes.Done;
begin
end;
Procedure TFishes.Moveto;
begin
Oblichie.left:=Oblichie.left+dx;
oblichie.top:=oblichie.top+dy;
end;
constructor TSmallK.Create(nx,ny,ndx,ndy:integer);
begin x:=nx; y:=ny; dx:=4*ndx; dy:=4*ndy; size:=1;
speed:=false;
oblichie.Width:=70; oblichie.height:=70;
oblichie.Picture.LoadFromFile("d:\c\!\karasL.bmp");
oblichie.Transparent:=true;
end;
procedure TSmallK.BeEaten;
begin
end;
procedure TSmallK.Whatdo(news:tdd);
begin
case news.dir of
1: moveto;
2: begin case news.aged of
1: begin dx:=dx-2*dx;

dy:=random(4);
if dy<>1 then dy:=dy-1
else dy:=dy-3;
end;

3: begin dx:=dx-2*dx;

dy:=random(4);
if dy<>1 then dy:=dy-1
else dy:=dy-3;
end;

2: begin dy:=dy-2*dy;
dx:=random(4);
if dx<>1 then dx:=dx-1
else dx:=dx-3;
end;

4: begin dy:=dy-2*dy;
dx:=random(4);
if dx<>1 then dx:=dx-1
else dx:=dx-3;
end;

end;
if news.aged<>0 then
if dx<0 then
oblichie.Picture.LoadFromFile("d:\c\!\karas.bmp")
else
oblichie.Picture.LoadFromFile("d:\c\!\karas2.bmp");

// if not speed then begin dx:=2*dx; dy:=2*dy;
// speed:=true; end;
moveto;
end;
3: begin if x<100 then dx:=random(2)+1
else dx:=random(2)-2;
if y<100 then dy:=random(2)+1
else dy:=random(2)-2;
if news.aged=2 then begin dx:=2*dx; dy:=2*dy; end;
moveto; speed:=false;
end;
4: BeEaten;
end;
end;
constructor TKarasM.Create(nx,ny,ndx,ndy:integer);
begin dx:=2*ndx; dy:=2*ndy; size:=2;

Oblichie:=TImage.Create(Form3);
Oblichie.Parent:=Form3;
oblichie.left:=nx; oblichie.top:=ny;
oblichie.Transparent:=true;
oblichie.visible:=true;
if dx<0 then
oblichie.Picture.LoadFromFile("D:\c\!\karas.bmp")
else
oblichie.Picture.LoadFromFile("D:\c\!\karas2.bmp");
oblichie.Width:=73; oblichie.height:=35;
end;
procedure TKarasM.Death;
begin
end;
procedure TKarasM.whatdo(news:tdd);
begin inherited whatdo(news);
if news.die then Death;
( nx,ny,ndx,ndy:integer) 2-я часть кода
*************
Implementation
uses Unit3;
constructor TFishes.Create(nx,ny,ndx,ndy:integer);
begin Oblichie:=TImage.Create(Form3);
Oblichie.Parent:=Form3;
oblichie.left:=nx; oblichie.top:=ny;
oblichie.Transparent:=true;
oblichie.visible:=true;
end;
function TFishes.Getx:integer;
begin
getx:=x;
end;
function TFishes.Gety:integer;
begin
gety:=y;
end;
function TFishes.Getfutposx:integer;
begin
getfutposx:=oblichie.left+dx;
end;
function TFishes.Getfutposy:integer;
begin
getfutposy:=oblichie.top+dy;
end;
function Tfishes.Getsize:integer;
begin
getsize:=size;
end;
Destructor TFishes.Done;
begin
end;
Procedure TFishes.Moveto;
begin
Oblichie.left:=Oblichie.left+dx;
oblichie.top:=oblichie.top+dy;
end;
constructor TSmallK.Create(nx,ny,ndx,ndy:integer);
begin x:=nx; y:=ny; dx:=4*ndx; dy:=4*ndy; size:=1;
speed:=false;
oblichie.Width:=70; oblichie.height:=70;
oblichie.Picture.LoadFromFile("d:\c\!\karasL.bmp");
oblichie.Transparent:=true;
end;
procedure TSmallK.BeEaten;
begin
end;
procedure TSmallK.Whatdo(news:tdd);
begin
case news.dir of
1: moveto;
2: begin case news.aged of
1: begin dx:=dx-2*dx;

dy:=random(4);
if dy<>1 then dy:=dy-1
else dy:=dy-3;
end;

3: begin dx:=dx-2*dx;

dy:=random(4);
if dy<>1 then dy:=dy-1
else dy:=dy-3;
end;

2: begin dy:=dy-2*dy;
dx:=random(4);
if dx<>1 then dx:=dx-1
else dx:=dx-3;
end;

4: begin dy:=dy-2*dy;
dx:=random(4);
if dx<>1 then dx:=dx-1
else dx:=dx-3;
end;

end;
if news.aged<>0 then
if dx<0 then
oblichie.Picture.LoadFromFile("d:\c\!\karas.bmp")
else
oblichie.Picture.LoadFromFile("d:\c\!\karas2.bmp");

// if not speed then begin dx:=2*dx; dy:=2*dy;
// speed:=true; end;
moveto;
end;
3: begin if x<100 then dx:=random(2)+1
else dx:=random(2)-2;
if y<100 then dy:=random(2)+1
else dy:=random(2)-2;
if news.aged=2 then begin dx:=2*dx; dy:=2*dy; end;
moveto; speed:=false;
end;
4: BeEaten;
end;
end;
constructor TKarasM.Create(nx,ny,ndx,ndy:integer);
begin dx:=2*ndx; dy:=2*ndy; size:=2;

Oblichie:=TImage.Create(Form3);
Oblichie.Parent:=Form3;
oblichie.left:=nx; oblichie.top:=ny;
oblichie.Transparent:=true;
oblichie.visible:=true;
if dx<0 then
oblichie.Picture.LoadFromFile("D:\c\!\karas.bmp")
else
oblichie.Picture.LoadFromFile("D:\c\!\karas2.bmp");
oblichie.Width:=73; oblichie.height:=35;
end;
procedure TKarasM.Death;
begin
end;
procedure TKarasM.whatdo(news:tdd);
begin inherited whatdo(news);
if news.die then Death;
end;
constructor TKarasW.create(nx,ny,ndx,ndy:integer);
begin inherited Create(nx,ny,ndx,ndy);
end;
procedure TKarasW.PutCaviar;
begin
end;


 
Марина   (2003-04-23 17:11) [8]

3-я часть
******

procedure TKarasW.whatdo(news:tdd);
begin inherited whatdo(news);
if news.calv then PutCaviar;
end;
constructor TSmallsh.Create(nx,ny,ndx,ndy:integer);
begin inherited create(nx,ny,ndx,ndy);
dx:=2*ndx; dy:=2*ndy; size:=1;
oblichie.Width:=90; oblichie.height:=70;
oblichie.Picture.LoadFromFile("d:\c\!\chukaL.bmp");

end;
procedure TSmallsh.WaitForKill;
begin
end;
procedure TSmallsh.Whatdo(news:tdd);
begin
case news.dir of
1: moveto;
2: begin case news.aged of
1: begin dx:=dx-2*dx;

dy:=random(4);
if dy<>1 then dy:=dy-1
else dy:=dy-3;
end;

3: begin dx:=dx-2*dx;

dy:=random(4);
if dy<>1 then dy:=dy-1
else dy:=dy-3;
end;

2: begin dy:=dy-2*dy;
dx:=random(4);
if dx<>1 then dx:=dx-1
else dx:=dx-3;
end;

4: begin dy:=dy-2*dy;
dx:=random(4);
if dx<>1 then dx:=dx-1
else dx:=dx-3;
end;

end;
if dx<0 then
oblichie.Picture.LoadFromFile("d:\c\!\chuka.bmp")
else
oblichie.Picture.LoadFromFile("d:\c\!\chuka2.bmp");

// if not speed then begin dx:=2*dx; dy:=2*dy;
// speed:=true; end;
moveto;
end;
3: begin if x<100 then dx:=(random(2)+1)
else dx:=(random(2)-2);
if y<100 then dy:=(random(2)+1)
else dy:=(random(2)-2);
if news.aged=2 then begin dx:=2*dx; dy:=2*dy; end
else begin dx:=3*dx; dy:=3*dy; end;
moveto; speed:=false;
end;
4: WaitForKill;
end;
end;
constructor TShyukaM.Create(nx,ny,ndx,ndy:integer);
begin
Oblichie:=TImage.Create(Form3);
Oblichie.Parent:=Form3;
oblichie.left:=nx; oblichie.top:=ny;
oblichie.Transparent:=true;
oblichie.visible:=true;
dx:=ndx; dy:=ndy; size:=2; speed:=false;
if dx<0 then
oblichie.Picture.LoadFromFile("d:\c\!\chuka.bmp")
else
oblichie.Picture.LoadFromFile("d:\c\!\chuka2.bmp");
oblichie.Width:=161; oblichie.height:=41;

end;
procedure TShyukaM.Death;
begin
end;
procedure TShyukaM.whatdo(news:tdd);
begin inherited whatdo(news);
if news.die then Death;
end;
constructor TShyukaW.Create(nx,ny,ndx,ndy:integer);
begin inherited create(nx,ny,ndx,ndy);
end;
procedure TShyukaW.PutCaviar;
begin
end;
procedure TShyukaW.whatdo(news:tdd);
( news) 3-я часть
******

procedure TKarasW.whatdo(news:tdd);
begin inherited whatdo(news);
if news.calv then PutCaviar;
end;
constructor TSmallsh.Create(nx,ny,ndx,ndy:integer);
begin inherited create(nx,ny,ndx,ndy);
dx:=2*ndx; dy:=2*ndy; size:=1;
oblichie.Width:=90; oblichie.height:=70;
oblichie.Picture.LoadFromFile("d:\c\!\chukaL.bmp");

end;
procedure TSmallsh.WaitForKill;
begin
end;
procedure TSmallsh.Whatdo(news:tdd);
begin
case news.dir of
1: moveto;
2: begin case news.aged of
1: begin dx:=dx-2*dx;

dy:=random(4);
if dy<>1 then dy:=dy-1
else dy:=dy-3;
end;

3: begin dx:=dx-2*dx;

dy:=random(4);
if dy<>1 then dy:=dy-1
else dy:=dy-3;
end;

2: begin dy:=dy-2*dy;
dx:=random(4);
if dx<>1 then dx:=dx-1
else dx:=dx-3;
end;

4: begin dy:=dy-2*dy;
dx:=random(4);
if dx<>1 then dx:=dx-1
else dx:=dx-3;
end;

end;
if dx<0 then
oblichie.Picture.LoadFromFile("d:\c\!\chuka.bmp")
else
oblichie.Picture.LoadFromFile("d:\c\!\chuka2.bmp");

// if not speed then begin dx:=2*dx; dy:=2*dy;
// speed:=true; end;
moveto;
end;
3: begin if x<100 then dx:=(random(2)+1)
else dx:=(random(2)-2);
if y<100 then dy:=(random(2)+1)
else dy:=(random(2)-2);
if news.aged=2 then begin dx:=2*dx; dy:=2*dy; end
else begin dx:=3*dx; dy:=3*dy; end;
moveto; speed:=false;
end;
4: WaitForKill;
end;
end;
constructor TShyukaM.Create(nx,ny,ndx,ndy:integer);
begin
Oblichie:=TImage.Create(Form3);
Oblichie.Parent:=Form3;
oblichie.left:=nx; oblichie.top:=ny;
oblichie.Transparent:=true;
oblichie.visible:=true;
dx:=ndx; dy:=ndy; size:=2; speed:=false;
if dx<0 then
oblichie.Picture.LoadFromFile("d:\c\!\chuka.bmp")
else
oblichie.Picture.LoadFromFile("d:\c\!\chuka2.bmp");
oblichie.Width:=161; oblichie.height:=41;

end;
procedure TShyukaM.Death;
begin
end;
procedure TShyukaM.whatdo(news:tdd);
begin inherited whatdo(news);
if news.die then Death;
end;
constructor TShyukaW.Create(nx,ny,ndx,ndy:integer);
begin inherited create(nx,ny,ndx,ndy);
end;
procedure TShyukaW.PutCaviar;
begin
end;
procedure TShyukaW.whatdo(news:tdd);
begin inherited whatdo(news);
if news.calv then PutCaviar;
end;
end.


 
Skier ©   (2003-04-23 17:23) [9]

Уговорила...Уговорила...:)))
Высылай мне по почте свою программу (вместе с bmp-файлами где рыбины нарисованы, только зазиповать все не забудь !).
Адрес в моей анкете...Попробую повозиться...время сегодня есть...


 
Карелин Артем ©   (2003-04-23 17:28) [10]

Когда я делал программу для верстки видео, мне очень понравился пакет http://www.g32.org/graphics32/index.html своей скоростью, отсутствием мерцания и некоторыми специфическими возможностями.


 
Плохой человек   (2003-04-23 21:32) [11]

Да, Graphic32 - очень мощная штука, альфа работает как родная. Именно способ вывода на невидимый буфер фона и картинок надо и развивать.


 
Сергей А   (2003-04-24 05:32) [12]

Можно попробовать такую фишку: перед рисованием поставить ---.enabled:=false, а после ---.enabled:=true


 
Плохой человек   (2003-04-24 22:44) [13]

>Можно попробовать такую фишку: перед рисованием поставить ---.enabled:=false, а после ---.enabled:=true

Неможно. Рисовать ндао всё правильно. Пользовтаься мощностью компьютера и с тем отсутсвием мерцания неправильно.


 
pasha676   (2003-04-25 09:51) [14]

Имхо - не надо пользоваться TImage как средством анимирования и перемещения картинок.



Страницы: 1 вся ветка

Текущий архив: 2003.08.21;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.012 c
3-68236
galexis
2003-07-24 11:49
2003.08.21
Можно ли с помощью SQL запроса очистить таблицу?


14-68518
ferrik
2003-07-31 19:35
2003.08.21
Http


14-68447
prihod
2003-08-04 16:36
2003.08.21
!!! Инсталяхи !!!


4-68598
Alexander666
2003-06-18 22:30
2003.08.21
Завершение процесса


1-68280
VG
2003-08-07 06:41
2003.08.21
Combobox, которрый бы показывал стили линий