AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi flackerfreies repaint

flackerfreies repaint

Ein Thema von dajuhsa · begonnen am 21. Aug 2007 · letzter Beitrag vom 22. Aug 2007
Antwort Antwort
Benutzerbild von dajuhsa
dajuhsa

Registriert seit: 20. Apr 2007
397 Beiträge
 
Turbo Delphi für Win32
 
#1

flackerfreies repaint

  Alt 21. Aug 2007, 22:52
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 (bei Refresh etwas weniger), hat vielleicht jemand ne idee wie ich das lösen könnte?
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
Angehängte Dateien
Dateityp: exe prjball_112.exe (560,5 KB, 18x aufgerufen)
das Essen ist wie das Internet - Downstream ist immer angenehmer als Upstream
-
Warum missbraucht die ganze Programmierwelt Images als Paintboxen
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: flackerfreies repaint

  Alt 21. Aug 2007, 23:05
Hier im Forum suchenflackern ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von dajuhsa
dajuhsa

Registriert seit: 20. Apr 2007
397 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: flackerfreies repaint

  Alt 21. Aug 2007, 23:09
sagen wir mal ~5 mal in der sekunde:
-Bildschirm wird weiß
-Bildschirm zeigt Ball
-Bildschirm wird weiß

sorry falls das falsch rüberkam
das Essen ist wie das Internet - Downstream ist immer angenehmer als Upstream
-
Warum missbraucht die ganze Programmierwelt Images als Paintboxen
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#4

Re: flackerfreies repaint

  Alt 21. Aug 2007, 23:20
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.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
DelphiKlaus

Registriert seit: 18. Okt 2006
100 Beiträge
 
Delphi 6 Professional
 
#5

Re: flackerfreies repaint

  Alt 22. Aug 2007, 06:46
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
  Mit Zitat antworten Zitat
Benutzerbild von dajuhsa
dajuhsa

Registriert seit: 20. Apr 2007
397 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: flackerfreies repaint

  Alt 22. Aug 2007, 11:15
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:
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;
nur mal als ansatz. wenn ihr mehr braucht zeig ich euch auch gern alles.

[Edit] @Jim: wie soll das gehen mit Bitmap.Canvas komm ich nicht weiter, könntest du mir bitte eventuell ein bisschen code opfern? [/Edit]
Edit : bin jetz n bisschen weiter aber wie man sieht blitzt es immer noch und man sieht noch zu viel weiß. helft mir bitte
Angehängte Dateien
Dateityp: rar prjball_106.rar (1,11 MB, 13x aufgerufen)
das Essen ist wie das Internet - Downstream ist immer angenehmer als Upstream
-
Warum missbraucht die ganze Programmierwelt Images als Paintboxen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz