AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Hintergrundbild erstellen

Ein Thema von VkPenguin · begonnen am 13. Feb 2012 · letzter Beitrag vom 26. Feb 2012
Antwort Antwort
Seite 1 von 5  1 23     Letzte » 
VkPenguin

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

Hintergrundbild erstellen

  Alt 13. Feb 2012, 16: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, 16: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, 16: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, 17: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, 02: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, 20: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
Popov
(Gast)

n/a Beiträge
 
#7

AW: Hintergrundbild erstellen

  Alt 14. Feb 2012, 23:08
Ich gucke die Tage ob ich das in den Archiven finde. Ansonsten heißt das Schlagwort Api und Clipping. Soweit ich weiß liefert Delphi da nichts, so daß man die Api bemühen muß. Es gibt da paar Clipping Funktionen mit denen ich experimentiert haben. Ist aber, wie gesagt, schon lange her. Ansonsten im Internet nach Komponenten suchen die das irgendwie erledigen. Ist auch nicht einfach.

Aber, so habe ich gerade festgestellt, die Welt dreht sich weiter. Was vor 10 Jahren mit Delphi 3 noch stark ruckelte, klappt mit den heutigen Computern (obwohl meiner ist auch schon fünf Jahre alt) auch ohne Tricks relativ gut. Ich hab unten ein kleines Demo programmiert. Dieses mal einfach über eine temporärer Bitmap und Canvas 500 Objekte die sich bewegen. Es geht flüssig.

Achso: die Ellipse im Hintergrund soll der Ersatz-Hintergrund sein. Hier bewegen sich also Objekte über einen Hintergrund.
Angehängte Dateien
Dateityp: zip CanvasBsp.zip (194,5 KB, 20x aufgerufen)
  Mit Zitat antworten Zitat
VkPenguin

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

AW: Hintergrundbild erstellen

  Alt 15. Feb 2012, 18:32
Habe die einfache Variante mal getestet, obwohl ich einen Relativ guten PC hab wird das Spiel dadurch aber ruckelig - auch wenn es grundsätzlich funktioniert. Selbst wenn ich die Gegner-Raumschiffe nicht nach dem Prinzip "eins löschen, neue malen, nächstes" abarbeite, sondern alle lösche und dann neuzeichne ist schon ein bisschen Flackern zu sehen - ganz im Gegensatz zu deinen Demos.

Werde dann wohl die komplexere Variante benötigen, schaue mich in nächster Zeit mal nach den Schlüsselwörtern um, wäre aber dennoch lieb von Dir, wenn Du mir den Quellcode geben würdest, falls Du ihn findest
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#9

AW: Hintergrundbild erstellen

  Alt 15. Feb 2012, 19:06
Hast du DoubleBuffer auf True gesetzt?

//Edit:

Tipp: wenn dir die einfache Canvas Art nicht ausreicht, weil dein Spiel komplexer ist und du deshalb tiefer in die Materie einsteigen willst, dann erfinde nicht das Rad neu, sondern mach es gleich richtig. Warum die Api studieren und Tage oder Wochen mit der Entwicklung einer Engine vergeuden, mach es gleich richtig, nimm dir einer von den zahlreichen kostenlosen Engines für Delphi und investiere die Kraft da. Die bieten alles was man für ein Spiel braucht. Denn irgendwann kommst du auch mit der "Lochmaske" nicht klar. Das ist möglich, aber auch nicht das Wahre.

//Edit2:

Zufällig habe ich letzte Woche auf YouTube etwas zu 3D Spiele Programmierung mit Delphi entdeckt. Ich habe es mir nicht angeguckt, bis auf die ersten drei Minuten, also kann ich die Qualität der Videos nicht beurteilen, aber die Reihe scheint paar Stunden zu laufen und sich mit Delphi und Spielen zu beschäftigen.

Ach ja, der Link: http://www.youtube.com/watch?v=yotbaJaurPA

Geändert von Popov (15. Feb 2012 um 23:07 Uhr)
  Mit Zitat antworten Zitat
VkPenguin

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

AW: Hintergrundbild erstellen

  Alt 15. Feb 2012, 23:02
@ Popov:
Ja, DoubleBuffer war True, so kompliziert ist mein Spiel aber (Finde ich) garnicht.. bisher zumindest Nach den Videos auf Youtube werd ich mal suchen, das Problem an Delphi-Erweiterungen wie DelphiX ist aber, dass ich nichts nehmen kann, was zusätzlich installiert werden muss, da ich in meiner Schule keine Rechte dazu hab. Wenn schon müsste es also "out of the Box" funktionieren - und da hab ich noch nichts gefunden. Trotzdem aber Dankschöne für die Tipps!
  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 18:35 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