AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hintergrundbild erstellen

Ein Thema von VkPenguin · begonnen am 13. Feb 2012 · letzter Beitrag vom 26. Feb 2012
Antwort Antwort
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#1

Hintergrundbild erstellen

  Alt 13. Feb 2012, 17:09
Hallo,

nachdem ich nun gelernt habe, Bilder usw. zu verwenden zeichne ich in meinem Programm munter alles was ich brauche. Nun würde ich aber gerne ein Hintergrundbild einfügen, dass die gesamte Zeit konstant dort angezeigt wird, wo grade nichts anderes dargestellt wird, ich bräuchte also eine Art eben. Habe dazu schon einige Themen und Beispiele gefunden, die aber alle deutlich komplexere Ansprüche an ihre Ebenen haben (z.B. diese Seite zu Sprites).

Wenn ich das Bild zuerst zeichne werden die anderen Bilder ja einfach darübergezeichnet, was meinem Ziel im Prinzip schon nahekommt; nur bewegen sich meine Bilder ja.
Momentan mache ich das so, dass ich das alte Bild mit Schwarz (der aktuellen Hintergrundfarbe) übermale und es neu an die aktuelle Position zeichne - das geht natürlich nicht, wenn ich ein Bild im Hintergrund habe.
Ich wüsste also gern, ob den Hintergrund als eine Art Konstante festlegen kann, die sich nicht übermalen lässt..

Geht soetwas oder muss ich doch den umständlichen Weg über Sprites gehen?

Vielen Dank für Eure Tipps!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Hintergrundbild erstellen

  Alt 13. Feb 2012, 17:15
Nun ja, du malst auf einer Leinwand und pinselst dann etwas darüber. Somit ist das Bild darunter nicht mehr vorhanden.

Du musst also dieses Hintergrundbild immer wieder malen und dann den Rest darüber.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#3

AW: Hintergrundbild erstellen

  Alt 13. Feb 2012, 17:19
Ja, nur dann müsste ich erstens einen beträchtlichen Teil des Programms umschreiben (Im Moment zeichne ich nicht "zentral", sondern immer dann, wenn es benötigt wird. Wenn ich aber jedesmal davor das Hintergrundobjekt zeichne, wäre alles andere ja weg) - und vor allem: Das Hintergrundbild hat dem Bildschirm entsprechend die Auflösung 1920x1080. Wenn ich das für ca 30 FPS also 30 mal pro Sekunde neu zeichnen lasse ist das doch extrem Ressourcen-fressend oder nicht?
  Mit Zitat antworten Zitat
freeway

Registriert seit: 11. Jul 2009
57 Beiträge
 
Delphi XE Professional
 
#4

AW: Hintergrundbild erstellen

  Alt 13. Feb 2012, 18:27
Leg 2 Images übereinander
lad dein Bild in das untere und mach das oberste Transparent
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Hintergrundbild erstellen

  Alt 14. Feb 2012, 03:14
Paar Punkte wenn du selbst so etwas wie ein Bild zeichnest:

Zuerst in Create DoubleBuffer auf True setzten, gegen Flackern.

Wenn du direkt auf der Canvas des Formulars oder PaintBox zeichnest:
Du mußt auf OnFormPaint reagieren, d. h. die wird ausgeführt wenn dein Formular ganz, aber auch nur in Teilen neu gezeichnet wird.

Das Arbeiten mit mehreren Images führt zum flackern. Images sind keine Sprites.

Das Einfachste (nicht das Beste) ist mit einer temporären Bitmap zu arbeiten. Du zeichnest zuerst alles auf der Bitmap und dann, wenn alles fertig ist, das Ergebnis auf das Formular. Wenn das nur etwas Einfaches ist, dann reicht es. Wenn du dein Ergebnis z. B. 10 mal in der Sekunde zeichnest, dann kommen die Probleme. Das Ergebnis flackert und, ja nach Bildgröße kommt das Programm mit dem Zeichnen nicht nach.

Etwas besser, aber aufwendiger ist, du erstellst eine Art Clipping-Map. Das habe ich mal gemacht, ist aber schon Jahre her, so dass ich die Details auch nicht weiter weiß. Die Clipping-Map (ich nenne das mal so) ist eine Art Lochmaske die du beim Zeichnen erstellst. Beispiel, du hast ein 50 Pixel großen Ball der sich sich bewegt. Beim letzten Bild war der an der Position 100x100, jetzt ist er an 120x100. Du vermerkst die Umrisse des alten Balles an der Position 100x100 und des neuen Balles an Position 120x100. Parallel dazu zeichnest du den Hintergrund an der alten Position neu und den Ball auf der neuen Position, auf der temporären Bitmap. Wenn das Ergebnis fertig ist, legst du die Clipping-Map über das Formular und zeichnest die temporäre Bitmap.

Welchen Vorteil bringt es, wenn hier mehr gezeichnet wird? Erstens brauchst du nur das neu zeichnen was geändert wurde und Zweites zeichnet das System später nichts außerhalb der "Löcher". Das hat Folgen: Erstens ist es schneller, da nur in den Clipping Bereich gezeichnet wird und Zweitens, noch wichtiger, es flackert weniger.

Leider hatte ich nicht genug Zeit das weiter zu verfolgen, aber auf Canvas ein Game zaubern ist möglich.

Als Anhang eine kleine Demo. Auf einem Formular befinden sich an die 100 Rechtecke, auf 100 Ebenen, paar davon bewegen sich zwischen den Ebenen. Es sieht nicht spektakulär aus, ist aber nach dem oberen Muster mit Clipping-Bereichen gemacht worden. Leider habe ich nur die Exe, finde auf die Schnelle den Code nicht.
Angehängte Dateien
Dateityp: zip CanvasDemo.zip (105,1 KB, 23x aufgerufen)
  Mit Zitat antworten Zitat
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#6

AW: Hintergrundbild erstellen

  Alt 14. Feb 2012, 21:01
Danke für Eure Hilfe!
@ Popov: Deine erste Variante verstehe ich zwar, sie funktioniert für mich nur leider nicht. Die zweite Variante hört sich da schon wesentlich vielversprechender an, aber da komme ich wiederum leider nicht ganz mit Kennst du vielleicht ein Tutorial, oder weißt du wo ich den Code zu der Demo finde, sodass ich mir da ein paar Techniken abgucken kann? Alternativ wäre es auch nett, wenn du einen etwas ... offizielleren Namen dafür kennst, unter deinem konnte ich bisher nämlich leider nichts wirklich passendes finden..
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:02 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 by Thomas Breitkreuz