![]() |
flackerfreies repaint
Liste der Anhänge anzeigen (Anzahl: 1)
SALVETE !!
also ich arbeite an einem Spiel, wo man einen bunten Ball steuern kann (s. Anhang) alles ohne Komponenten sondern mit Canvas.StretchDraw Wie man sieht hinterlässt der Ball eine Spur die ich gerne vermeiden möchte aber wenn ich vor dem Zeichnen Repaint mache, flackert es ständig :wall: (bei Refresh etwas weniger), hat vielleicht jemand ne idee wie ich das lösen könnte? :gruebel: Steuerung: A, <- um nach links zu rollen D, -> um nach rechts zu rollen Esc zum Beenden. Bitte seht es euch mal an Schonmal Danke für eure Hilfe |
Re: flackerfreies repaint
:gruebel:
![]() |
Re: flackerfreies repaint
sagen wir mal ~5 mal in der sekunde:
-Bildschirm wird weiß -Bildschirm zeigt Ball -Bildschirm wird weiß sorry falls das falsch rüberkam |
Re: flackerfreies repaint
Ein Offscreen-Bild dürfte dir helfen. Heisst du zeichnest nicht direkt in die Canvas der Form sondern in ein Bitmap und anschließend zeichnest du das gesamte Bitmap auf die Form.
|
Re: flackerfreies repaint
Hallo,
u.U. ist es auch möglich, mit DoubleBuffered zu arbeiten. Damit wird das Bild erst im Hintergrund aufbereitet und wenn es fertig ist, dargestellt. Erfordert keine Programmänderungen außer dem Hinzufügen einer Zeile Komponente.DoubleBuffered := True |
Re: flackerfreies repaint
Liste der Anhänge anzeigen (Anzahl: 1)
also ich habe:
MainBit: TBitmap -wird zu programmstart createt und ein Bild aus ressource reingeladen (der ball)(und im ondestroy wieder free) SpinBit: TBitmap -Da wird das MainBit gedreht reingezeichnet und das SpinBit dann mit StretchDraw auf die Form.Canvas(der gedrehte ball) Doublebuffered steht schon längst auf true :|
Delphi-Quellcode:
procedure TForm1.Render;
begin PlrBitSpin := TBitmap.Create; try RotateBitmap(PlrBitSpin, PlrBitMain, Winkel, clWhite, false, true); Canvas.StretchDraw( rect(Position.X-25, Position.Y-25, Position.X+25, Position.Y+25), PlrBitSpin ); finally PlrBitSpin.Free; end; end;
Delphi-Quellcode:
nur mal als ansatz. wenn ihr mehr braucht zeig ich euch auch gern alles.
procedure TForm1.Run;
begin Timer := GetTickCount; while GetAsyncKeyState(VK_ESCAPE)=0 do begin while Timer + Interval > GetTickCount do // Zeitbremse Application.ProcessMessages; // Pseudo-Timer Input; // Reagiert auf 'a' und 'd' Winkel := Winkel + Speed; // Ball dreht sich Position.X := Position.X + Speed; // Ball bewegt sich if Position.X < 0 then Position.X := 0; if Position.X > screen.Width then Position.X := screen.Width; Render; // Ball zeichnet sich end; Close; end; [Edit] @Jim: wie soll das gehen :gruebel: mit Bitmap.Canvas komm ich nicht weiter, könntest du mir bitte eventuell ein bisschen code opfern? [/Edit] Edit :oops: : bin jetz n bisschen weiter aber wie man sieht blitzt es immer noch und man sieht noch zu viel weiß. helft mir bitte |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz