AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi nur Bereiche neuzeichnen
Thema durchsuchen
Ansicht
Themen-Optionen

nur Bereiche neuzeichnen

Ein Thema von Cöster · begonnen am 16. Okt 2006 · letzter Beitrag vom 18. Okt 2006
Antwort Antwort
Seite 1 von 2  1 2      
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#1

nur Bereiche neuzeichnen

  Alt 16. Okt 2006, 18:09
Hi!

Zur Performanceverbesserung (2D-Spiel/PaintBox), möchte ich nur Bereiche neuzeichnen. In dem Spiel gibt es mehrere Kugeln, die sich über die PaintBox bewegen. Ich möchte also nur die Kugeln neuzeichnen.

Ich zeichne sie auf ein Bitmap (quadratisch, Seitenlänge = Durchmesser der Kugel) im Speicher und kopiere sie dann per BitBlt alle nacheinander auf die PaintBox.

Da das Bitmap im Speicher ein Quadrat, ist, kommt es gelegentlich vor, dass die Ecken des Quadrats eine andere Kugel übermalen (siehe Anhang).

Wie kann ich das verhindern?

Meine Ideen:
1) Gibt es eine Methode wie BitBlt, die stattdessen Kreise kopiert?
2) Direktes Zeichnen auf PaintBox.Canvas, ohne Bitmap im Speicher
3) Sollte das Bitmap im Speicher die Größe der PaintBox haben, dass ich also doch ALLES neuzeichne?


EDIT: Anhang vergessen
Angehängte Grafiken
Dateityp: bmp bereiche_zeichnen_437.bmp (3,3 KB, 79x aufgerufen)
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: nur Bereiche neuzeichnen

  Alt 16. Okt 2006, 18:37
So, nun ist auch was im Anhang
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: nur Bereiche neuzeichnen

  Alt 16. Okt 2006, 18:50
Beim zeichnen des Hintergrundes könntest du BrushStyle auf bsClear stellen ...

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: nur Bereiche neuzeichnen

  Alt 16. Okt 2006, 20:53
Hm. An welcher Stelle und wovon muss ich denn Brush.Style auf bsClear setzen?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Bmp: TBitmap;
begin
  // PaintBox1.Canvas.Brush.Style := bsClear;
  Bmp := TBitmap.Create;
  try
    Bmp.SetSize(30, 30);
    with Bmp.Canvas do
    begin
      // Brush.Style := bsClear;
      Pen.Color := clYellow;
      Brush.Color := clYellow;
      Ellipse(0, 0, 30, 30);
      BitBlt(PaintBox1.Canvas.Handle, 0, 0, 30, 30, Handle, 0, 0, SRCCOPY);
      Pen.Color := clRed;
      Brush.Color := clRed;
      Ellipse(0, 0, 30, 30);
      BitBlt(PaintBox1.Canvas.Handle, 20, 20, 30, 30, Handle, 0, 0, SRCCOPY);
    end;
  finally
    Bmp.Free;
  end;
end;
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#5

Re: nur Bereiche neuzeichnen

  Alt 17. Okt 2006, 11:43
Du verwendest doch ohnehin Classen aus der Unit Graphics.

Dann kannst du auch Bmp.Transparent auf True setzen und mit PaintBox1.Canvas.Draw(x,y,Bmp) die Kugeln zeichnen. Ggf. müsste man auch mal Bmp.TransparentColor auf einen gewünschten Wert setzen.
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: nur Bereiche neuzeichnen

  Alt 17. Okt 2006, 16:16
Ah, danke Cicaro!! Draw statt BitBlt

Macht es denn dann überhaupt Sinn, BitBlt statt Draw zu verwenden, wenn der letzte Parameter sowieso SRCCOPY ist und das gesamte Bitmap im Speicher und nicht nur Teile davon auf ein Canvas kopiert werden sollen? Das ist ja meistens der Fall, wenn BitBlt benutzt wird. Oder ist BitBlt vielleicht schneller als Draw?
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: nur Bereiche neuzeichnen

  Alt 17. Okt 2006, 18:20
Arghh, Draw selbst ist zwar nur minimal langsamer als BitBlt, aber Transparent ist unerträglich. Bei einem 50x50 Bitmap dauert das ganze allein durch Transparent 200 (!!!) mal so lange.

Hat sonst noch jemand ne Idee?
  Mit Zitat antworten Zitat
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#8

Re: nur Bereiche neuzeichnen

  Alt 17. Okt 2006, 21:48
try finally wegnehmen das ist nur zeitverschwendung.
Besucht doch mal meine Homepage
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: nur Bereiche neuzeichnen

  Alt 17. Okt 2006, 22:06
Zitat von Gandalfus:
try finally wegnehmen das ist nur zeitverschwendung.
Resorcen-Schutzblöcke sollte man generell verwenden!
  Mit Zitat antworten Zitat
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#10

Re: nur Bereiche neuzeichnen

  Alt 17. Okt 2006, 22:41
nicht da wo es auf Geschwindigkeit ankommt
Besucht doch mal meine Homepage
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:55 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