![]() |
TBitmap - gaaanz viele - wie gehts schneller!?
Hi!
Ich bin gerade an Meinem "Snake-Clone" Projekt und habe eine Spielfläche von z.b. 25x15 jedes feld bekommt dann ein TImage (ansprechbar über imFeld[x,y]) zum erstellen des feldes
Code:
gibt es da eine schnellere methode? z.b. die verwendung von jpges oder so?!
for x := 1 to Spielfeld.Breite do
begin for y := 1 to Spielfeld.Hoehe do begin imFeld[x,y] := TImage.Create(imFeld[x,y]); // Konstruktor with imFeld[x,y] do begin Parent:= Form1; //das Objekt gehört zu Form1 ... case Spielfeld.Feld[x,y].Inhalt of 0: Picture.Bitmap := bmpNichts; // Bitmap zuweisen! 1: Picture.Bitmap := bmpWand; end; Show; // TImage anzeigen end; end; oder hab ich einen groben denkfehler mfg stefan ach ja:
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin bmpWand := TBitmap.Create; bmpWand.LoadFromFile('wand.bmp'); ... |
Re: TBitmap - gaaanz viele - wie gehts schneller!?
Also jpgs würden zwar den Speicheraufwand auf der Festplatte reduzieren, aber keinen Geschwindigkeitsvorteil bringen, eher sogar nachteilig wirken. Schließlich wird intern immer noch mit einem Bitmap gearbeitet, doch muss das jpg-Bild erst in ein Bitmap konvertiert werden.
Aber mir würde ad hoc nichts einfallen, was den Vorgang beschleunigen könnte. Obwohl ich eher dazu tendieren würde, eine einzelne Paintbox nehmen würde. Im Hintergrund zeichnet man einfach alles auf ein Bitmap und weist der Paintbox dieses bei jeder Veränderung und dem OnPaint-Ereigniss zu. Der Programmstart wäre auf jeden Fall schneller, und ich denke der Ablauf auch, obwohl da eher nicht spürbar. Hätte außerdem den Vorteil, das diese Zeichentechnik der von DirectDraw/OpenGL im orthogonalen Modus entspricht, und wenn man mal darauf umsteigen möchte, fällt dies natürlich leichter. MfG |
Re: TBitmap - gaaanz viele - wie gehts schneller!?
Du kannst auch nur ein BitMap verwenden und dann die vielen kleinen BitMap's dort reinzeichnen...
schau z.B. mal in den Schachthread, da ist auch jemand mit dieser Frage der Darstellungsart beschäftigt ist.
Delphi-Quellcode:
[EDIT]
// z.B. wenn die kleinen BitMap's eine Größe von 20x20 Pixel haben.
for x := 1 to Spielfeld.Breite do for y := 1 to Spielfeld.Hoehe do case Spielfeld.Feld[x,y].Inhalt of 0: Image1.Canvas.Draw(X * 20, Y * 20, bmpNichts); 1: Image1.Canvas.Draw(X * 20, Y * 20, bmpWand); end; Delphi-Tags vergessen :oops: |
Re: TBitmap - gaaanz viele - wie gehts schneller!?
Hab ich nicht schon so was ausgedrückt oder schiele ich? Sollte ich doch langsam ins Bett?!?
|
Re: TBitmap - gaaanz viele - wie gehts schneller!?
Wo ich das jetzt nochmal lese ... auch endlich mal schlafen sollte -.-
|
Re: TBitmap - gaaanz viele - wie gehts schneller!?
PaintBox klappt perfekt!
Thx @ all |
Re: TBitmap - gaaanz viele - wie gehts schneller!?
Vergiss aber nicht, das die PaintBox das Bild nicht speichert, wenn also mal ein Teil von dem darauf befindlichen Bild übermalt wird, dann ist es auch weg und dü müßtest das Bild, oder zumindestens den Bildteil neu zeichnen.
|
Re: TBitmap - gaaanz viele - wie gehts schneller!?
Zu dem Problem, sieh hier:
![]() |
Re: TBitmap - gaaanz viele - wie gehts schneller!?
[OT]
Zitat:
Delphi-Quellcode:
:roll:
{ Hintergrundfarbe und Stiftdicke }
|
Re: TBitmap - gaaanz viele - wie gehts schneller!?
Zitat:
mfg stefan aber danke für den tipp |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 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