[Delphi]DelphiX Flicker

Pagina: 1
Acties:

  • Coltrui
  • Registratie: Maart 2001
  • Niet online
Hoi,

Ik ben net beginnen prutsen met DelphiX (v2000.07.17a voor Delphi 5 - Win2000 PRO - DirectX9).
Nu kwam ik een goede basic tutorial daarvoor tegen op deze site.
De bijgeleverde code is prima verstaanbaar maar als ik compileer en execute, flikkert het scherm blijkbaar bij elke tik van m'n DXTimer.
De properties DoWaitBlank (vertical scan) en DoHardware van mijn DXDraw-component staan op "True". Ook ben ik alle beschikbare resoluties afgegaan. Het probleem blijft indien de exe op een oudere PC (P75) gedraaid wordt.
Naar ik gelezen heb is dit zo'n typische situatie die elk beginnend DelphiX-prutser tegenkomt - leuk om weten, maar nergens zetten ze er een oplossing bij :/ .
Mocht iemand enig idee hebben hoe dit op te lossen, hoor ik het graag - het hoeft niet per se in Delphi te zijn: ook iemand die ervaring heeft met DirectX-wrappers voor een andere programmeertaal weet misschien de achterliggende reden in het algemeen... :)

  • Akerboom
  • Registratie: Juni 2001
  • Laatst online: 29-07 13:20

Akerboom

Codito, ergo sum

ik dacht dat het met buffers te maken heeft... display buffers ed.

Nu teken je waarschijnlijk elke keer een nieuw scherm zonder een extra buffer

  • AuC
  • Registratie: Januari 2003
  • Laatst online: 10-07 15:00

AuC

Precies wat TormentoR zegt, dit kan eraan liggen dat je direct tekent naar het scherm. Je kan het beste een 'backbuffer' aanmaken, hierop tekenen. En als je klaar bent met tekenen, deze buffer pas op het scherm zetten.

[ Voor 4% gewijzigd door AuC op 10-10-2003 18:03 ]


  • Coltrui
  • Registratie: Maart 2001
  • Niet online
Delphi:
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
 DXImageList1.Items.Find('Background').Draw(DXDraw1.Surface,0,0,0);
 //Carry out the next movement. The higher the number in the brackets, the faster
 //the sprite animation:
 DXSpriteEngine1.Move(2);
 //Carry out a redraw to display the sprite in its new position:
 DXSpriteEngine1.Draw;
 //'Flip' the new picture of our surface into view:
 DXDraw1.Flip;
end;


Dit is het stukje code dat verantwoordelijk is voor het tekenen op het scherm. Als ik het goed begrepen heb, schrijft de Draw instructie de sprite weg naar het geheugen en projecteer je met "Flip" de sprite op je surface - double buffering dus. Dus ik denk dat wat jullie bedoelen reeds gedaan wordt in de code? :)