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
Popov
(Gast)

n/a Beiträge
 
#1

AW: Hintergrundbild erstellen

  Alt 19. Feb 2012, 01:16
Du kannst es machen wie du willst, aber es kostet nun mal Rechenzeit bei jeder Bewegung erst die Größe zu ändern.
Wobei ein kleiner Tipp, damit du nicht mit zig Bitmaps jonglieren mußt:

Delphi-Quellcode:
var
  _bmp_klein: TBitmap;
  _bmp_normal: TBitmap;
  _bmp_gross: TBitmap;

procedure TForm1.FormCreate(Sender: TObject);
begin
  _bmp_klein := TBitmap.Create;
  _bmp_normal:= TBitmap.Create;
  _bmp_gross := TBitmap.Create;
  //freigeben nicht vergessen

  _bmp_klein ...zuweisen...
  _bmp_normal ...zuweisen...
  _bmp_gross ...zuweisen...
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  bmp_zum_arbeiten: TBitmap;
begin
  bmp_zum_arbeiten := _bmp_klein;

  bmp_zum_arbeiten ...mach was...

  bmp_zum_arbeiten := _bmp_normal;

  bmp_zum_arbeiten ...mach was...
end;
Das klappt. Du mußt die Bitmap nicht umkopieren, du kopiert einfach deren Adresse und arbeitest immer mit der gleichen Bitmap. Nur bei Größenänderung kopierst du die Adresse einer anderen Bitmap.
  Mit Zitat antworten Zitat
VkPenguin

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

AW: Hintergrundbild erstellen

  Alt 19. Feb 2012, 01:19
Das ist geschickt, aber es wird ne weile dauern, das alles umzubauen.. Melde mich dann morgen nocheinmal
  Mit Zitat antworten Zitat
VkPenguin

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

AW: Hintergrundbild erstellen

  Alt 19. Feb 2012, 02:44
So, die Anzeigen laufen jetzt über Bitmaps. Es läuft, wenn man alle Transparenzen aktiviert, schon etwas langsam, aber es geht.

Was mir gerade einfiel:
Zitat:
Du mußt auf OnFormPaint reagieren, d. h. die wird ausgeführt wenn dein Formular ganz, aber auch nur in Teilen neu gezeichnet wird.
Kannst du das vielleicht ein bisschen erläutern?


... jetzt müsste ich nurnoch den Teil mit den Rechtecken verstehen, dann wär alles so, wie ich es gerne hätte

Wie lade ich denn einen Bildschirmausschnitt in die Bitmap? ist das der Teil mit "CopyRect..."?
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Hintergrundbild erstellen

  Alt 19. Feb 2012, 02:57
So, die Anzeigen laufen jetzt über Bitmaps. Es läuft, wenn man alle Transparenzen aktiviert, schon etwas langsam, aber es geht.
Man kann immer noch eine Kleinigkeit opftimieren.

Zitat:
Was mir gerade einfiel:
Zitat:
Du mußt auf OnFormPaint reagieren, d. h. die wird ausgeführt wenn dein Formular ganz, aber auch nur in Teilen neu gezeichnet wird.
Kannst du das vielleicht ein bisschen erläutern?
Das hängt davon ab wo du zeichnest. In eine TImage, dann brauchst du es nicht. Direkt auf das Canvas des Formular, dann wird löscht jedes Fenster das sich drüber legt die Zeichenfläche (Canvas). Aber das Formular erkennt, dass da eine gelöschte Fläche ist und füllt OnFormPaint aus. Natürlich weiß da Formular nicht was da hin soll, es ruft nur OnFormPaint auf. Du kannst dort ein mal das komplette Bild zeichnen und gut ist es. Wenn es wieder nötig wird, ruft das Formular wieder OnFormPaint auf.


Zitat:
... jetzt müsste ich nurnoch den Teil mit den Rechtecken verstehen, dann wär alles so, wie ich es gerne hätte

Wie lade ich denn einen Bildschirmausschnitt in die Bitmap? ist das der Teil mit "CopyRect..."?
Ja.
  Mit Zitat antworten Zitat
VkPenguin

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

AW: Hintergrundbild erstellen

  Alt 19. Feb 2012, 12:10
Es hat zwar noch ein ganzes Weilchen gedauert, habe jetzt aber endlich die CopyRect Funktion und den Rest verstanden, denke ich. Ich kann es zwar so noch nicht in meinem Hauptprogramm testen, aber ich denke, es würde funktionieren. Das Problem ist das erste mal:
Meine Gegner werden mit
Delphi-Quellcode:
x:=Random(50)+1;
For I:=1 To X Do
Begin
*erstelleGegner*
End;
erstellt, die Bewegung erfolgt in einer anderen Procedur etwa so:

Delphi-Quellcode:
For I:=1 Gegneranzahl DO
Begin
Gegner[I].lösche;
Gegner[I].PosX:=Gegner[I].PosX+Gegner[I].Geschwindigkeit;
Gegner[I].zeichne;
Wenn ich in die Bewegungsprocedur deinen Vorschlag einfüge sollte es ja gehen. Aber wie komme ich entweder beim ersten Durchgang an das GegnerBild oder, wenn ich es zuerst auf die Form zeichne, an den Ursprünglichen Inhalt des Fensters, also an den Hintergrund? Das einzige, was mir einfiel ist, das nötige im Record jedes Gegners zu speichern, und bei der Erstellung einzutragen, das erscheint mir aber ziemlich umständlich.. Geht das nicht besser?
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Hintergrundbild erstellen

  Alt 19. Feb 2012, 12:41
Du kopierst nichts zurück aus der Form Canvas. Die Form Canvas ist ist das endgültige Bild das permanent angepasst/verändert wird. Die Änderungen speisen sich immer aus dem Original. Der Hintergrund ist entweder immer fest, ist am einfachsten, dann hast du aber einen Hintergrund de sich nicht bewegt, oder flexibel, also einen beweglichen Hintergrund, z. B. ein Planet im Hintergrund der auf die Cursor-Tasten rauf und runter reagiert, dann ist der sichtbarer Hintergrund immer ein kleiner Ausschnitt eines großen Hintergrundbildes der mit CopyRect aus dem großen Bild kopiert wird. Soll das Bild scrollen, d. h. nach Linksbewegung, verschwindet der Planet rechts und kommt irgendwann wieder links wieder, muß ein Bild zusammengesetzt werden. Hört sich aber wilder an als es ist.
  Mit Zitat antworten Zitat
VkPenguin

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

AW: Hintergrundbild erstellen

  Alt 19. Feb 2012, 12:48
Ahh! Okay

Hab mir nochmal dein Ballprojekt angesehen, verstehen kann ich's aber leider immernoch nicht so ganz..Man kopiert aus dem Originalbild, das kommt jetzt auch meiner Ursprünglichen Vorstellung entgegen. Aber wie? In Deiner uMain wird doch RectNeu auch nur als RecNeu := Rect(x, y, x+Bmp.Width, y+Bmp.Height); deklariert. Wo sagst du denn Delphi, dass du nicht den Bereich auf dem Bildschirm, sondern im Originalbild meinst? Es scheint ja in deinem Programm zu funktionieren, aber ich kapiers trotzdem nicht
  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 10:07 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