Avatar billede danielhep Nybegynder
10. juni 2002 - 20:01 Der er 4 kommentarer og
1 løsning

double-buffering

Det med at DGI blinker når man får et billede til at rykke sig på sin form...Er der nogle som kender nogle gode links hvor double-buffering bliver brugt??
Avatar billede dr.truti Nybegynder
10. juni 2002 - 20:08 #1
Kunne du ikke forklare lidt nærmere... Jeg kan ikke fantasere mig om dette :)
Avatar billede danielhep Nybegynder
10. juni 2002 - 20:10 #2
Well, hvis man tager en Imagebox i Builder 5.0 c++ og får den til at bevæge sig rundt på formen, så blinker ImageBoxen nogle gange..Det er monster irreterende.. :)
Avatar billede soepro Nybegynder
11. juni 2002 - 08:39 #3
Double-buffering er jo noget mere hardware teknisk, dvs. du skal flytte dig længere "ud" mod grafik-kortet, for at kunne udnytte det. Fidusen i double-buffering er jo at man opbygger sit billede i "baggrunden", og så først gør det synligt når man er færdig.

Du kan opnå noget der ligner, uden at skulle til at ty til OpenGL eller DirectX, ved at lave to TImage komponenter på din form - den ene Visible=true, den anden Visible=false. Så tegner du din grafik på den usynlige, og laver om på de to properties når du er færdig og så fremdeles.

Altså noget i stil med:

class TForm1 : TForm
{
  // IDE managed
  TImage *Image1;
  TImage *Image2;

  :
  private:
  TImage *visibleImage, *hiddenImage;

  public:
  void __fastcall drawOnForm(void);
  void __fastcall showDraw(void);
  TForm1(TObject *Owner)
};

TForm1::TForm1(TObject *Owner) : TForm (Owner)
{
  visibleImage          = Image2;
  hiddenImage          = Image1;
  showDraw();
}

void __fastcall TForm1::drawOnForm(void)
{
  hiddenImage->Canvas->DrawLine(0, 100 ....); // O.s.v.
}

void __fastcall TForm1::showDraw(void)
{
  if (visibleImage == Image1)
  {
    visibleImage = Image2;
    hiddenImage  = Image1;
  }
  else
  {
    visibleImage = Image1;
    hiddenImage  = Image2;
  };
  hiddenImage->Visible  = false;
  visibleImage->Visible = true;
  Update(); // Tving gentegning af form NU.
}

I fht. til at lave noget grafik, der "rykker" uden at blinke, så prøv også at se under "c:\programmer\borland\cbuilder5\examples\games\EarthPng".
Avatar billede danielhep Nybegynder
12. juni 2002 - 10:29 #4
soepro>>

Det virker ikke.. :(
Avatar billede krismort Nybegynder
08. juli 2002 - 17:41 #5
Jeg tror den kære danielhep mener backbuffering istendet for double buffering. Du renderer til et DC i hukommelsen og når du har renderet en hel scene så "flipper" du indholdet af din backbuffer over på et DC i et vindue.
Brug DirectDraw til 2d grafik.. det er en del nemmerer når man først har fået fat i det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester