Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi Programm zu Speicherlastig? (läuft sehr langsam) (https://www.delphipraxis.net/126142-delphi-programm-zu-speicherlastig-laeuft-sehr-langsam.html)

Berlinermauer 18. Dez 2008 20:36

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Also ein Pointer den brauchse beim Dateienauslesen xD

Bilder wie du sie hast sind PixelGrafiken, also ist jeder Pixel gespeichert, jedoch kann man das runtterrechnen und so nur die minimale anzahl benötigen, zb mit gif, das is viel kleiner aber quali schlechter, das meinte SirHenry, wir müssen wisssen wie du das spiel "Machst" mit Andorra oder wie oder was.

Wenn deine Objekte nicht komplex sein Sollen kannst du Auch VektorBilder benutzen, das heißt zb "zeichne nen kreis mit radius x, statt einfach die pixel anzugeben"


Wenn du Googlest findest sicher was.

Edit: ohja images bewegen, dann läd er es immer neu.

Nutze doch ne Engine wie "Andorra 2D", die schon alles macht

taaktaak 18. Dez 2008 20:37

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
LoadFromFile ist natürlich (für diese Anforderungen) nicht gerade schnell - obwohl das Bild dann wohl meist aus dem Plattencache kommt. Aber besser wäre es, wie Sir Thornberry schon sagte, den Source mal einsehen zu können.

Phill 18. Dez 2008 20:44

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Liste der Anhänge anzeigen (Anzahl: 1)
"Den Source mal einsehen zu können" das übersetze ich mal mit "lad die .pas hoch" und habs prompt gemacht (siehe Anhang).

Kann sein dass ich das falsch verstanden hab (kA ob sich einer durch meinen quellcode wurschteln will (vorallem weil die levelup-procedure noch umständlig lang ist) )

SirThornberry 18. Dez 2008 20:45

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Wenn du mit TImages arbeitest und von 20 Objecten die Position änderst wird 20 mal neu gezeichnet (bei jedem Ändern einer Position eines TImage) was natürlich einiges an Zeit kostet.
Effektiver ist es wenn erst alle Positionen geändert werden und erst dann einmal neu gezeichnet wird.
Mit TImages geht das jedoch wohl nicht. (entweder nimmst du eine fertige Engine oder zeichnest selbst erst alles auf ein TBitmap und zeichnest dieses dann auf die Form)

lbccaleb 18. Dez 2008 21:19

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Auch von mir nochmal Herzlichwillkommen in der DP :dp: :dp:

Sicher ist, dass du auf jedenfall eine Grafik Engine brauchst! Ich ken neine ganz gute für Anfänger, ist sehr leicht zu erlernen, und für Anfänger bestenz geeignet:

Klickst du hier

das ist die HGE Delphi Engine, schau dir das bsp Programm von Ihr an, damit kannst du alles schnell und unkompliziert zeichnen, wie Animationseffekte und Partikels usw...


Solltest du nicht auf sowas zugreifen wollen, versuche mit Threads deine Bilder zu bewegen! Das bringt vllt nen bissel Geschwindigkeit, wird aber an ne Engine nicht ran kommen!

mfg

Phill 18. Dez 2008 23:56

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Wow also, ich hab mir die Beispiele angeguckt und, wow das ist was ich brauche aber.. wenn ich mir den quelltext so ansehe..

hge->System_Start();

das ist kein delphi oder? :pale:

Michael Habbe 19. Dez 2008 01:09

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Bei dem LoadFromFile und so ist mir spontan eingefallen, dass es nicht gut ist, diese Dinge sofort auf dem Bildschirm ausführen zu lassen. Das Kopieren der Bitmaps aus dem Speicher auf den Bildschirm braucht Zeit, zumindest unter der Verwendung der Standardroutinen.
Besser wäre es, Deine ganzen Grafikroutinen zuerst im Hintergrund im Speicher zu tätigen, also auf einem Bitmap was nicht auf den Bildschirm ausgibt. Erst wenn alle Routinen abgearbeitet sind, Deine Ausgabe auf das Form "kopieren".

Habe gerade keine Quelldatei zur Verfügung, um ein Beispiel zu bringen, vielleicht findet sich jemand, der was passendes hat. (Oder mich korrigiert, wenn ich falsch liege)

Tyrael Y. 19. Dez 2008 06:39

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Passt schon so Michael Habbe.

- du hast 2 Bitmaps(A, B)
- du machst dir eine Klasse, die als Eigenschaften Position(x und y) und eine Referenz zu einem Objekt hat
- für jedes sichtbare Element legts du dir ein Objekt dieser Klasse an
- du hast eine Liste in der genau die Objekte aus dieser Klasse abgespeichert werden
- du berechnest die Positionsänderungen und trägst die neuen Werte in die Objekte aus der Liste ein
- alle grafischen Objekte zeichnest du dir auf eins der beiden Bitmaps (zB. A) und weisst sie nach Ende der Zeichnung dem Anzeigebereich zu

- Berechnung der neuen Positionen und auf Bitmap B zeichnen
- ab jetzt immer im Wechsel mal auf Bitmap A und dann wieder auf B zeichnen

oder du bemühst eine Grafikengine, die es für dich erledigt ;)


Mach es erst mal mit Boardmitteln, man lernt damit auch dazu.

Phill 19. Dez 2008 11:25

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Ich glaube ich versteh was ihr meint, aber ich dachte die funktion
DoubleBuffered := True
würde mir die Arbeit mit den 2Bitmaps abnehmen.

Zur Grafik-Engine: habe mir das zip der HGE-Engine heruntergeladen aber werde nicht so recht schlau aus derem inhalt, glaube das ist ne ganz andere Programmiersprache, kann das sein?

jfheins 19. Dez 2008 11:37

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Zitat:

Zitat von Phill
hge->System_Start();

ist C/C++ also kein Delphi ;)

Ich würde es so machen, dass alle Bilder als Bitmaps im Speicher gehalten werden und zusätzlich zu jedem Bitmap gespeichert wird, ob es sicht bar ist und an welcher Position.

Dann kannst du ein großes Bitmap erzeugen und immer in einer Schleife durchgehen und folgende Schritte ausfüheren:

1. Großes Bitmap leeren

2. Alle kleinen Bilder an ihre Position kopieren (Hier im Forum suchenBitBlt)

3. Das große Bild ausgeben (ebenfalls mit Bitblt)

4. Von vorne anfangen

BitBlt ist eine Funktion, die schnell ein Bitmap in ein anderes kopiert ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr.
Seite 2 von 3     12 3      

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