Форум: "Media";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];
Внизмерцание экрана при передвижении объектов Найти похожие ветки
← →
Марина (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 вся ветка
Форум: "Media";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.009 c