Delphi-PRAXiS

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)

Phill 18. Dez 2008 19:51


Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute,
ich bin nur ungern der "neue Depp der es nicht schafft die SuFu zu nutzen" aber ich hab ein paar kleinere Probleme mit einem Programm dass ich grade schreibe und bräuchte das ein oder andere eher langsam erklärt (befasse mich noch nicht sehr lang mit delphi).

Ich programmiere grade ein Spiel (Shoot'em up - style), dass, je mehr ich dazu programmiere immer langsamer läuft. Ich hab ne Vermutung woran das liegt^^ aber macht euch selbst ein Bild! Hier zum besseren Verständnis ein Bild im Anhang.

Auch wenns schlecht zu sehen ist (halbe größe) jedes der Gegnerschiffe hat noch eigene Schüsse.. Bei der Gegneranzahl ist die Spielgeschwindigkeit noch ok, nur sollte da nicht das Limit sein (wenn man bedenkt dass die linke Navi noch voll Energie, Leben, etc gestopft werden soll) Laaaaaaaaaange Rede, kurzer Sinn:

Hilfe. Also: ALLE Bilder die ich benutze sind BMPs... warum? weil er JPGs und PNGs irgendwie nicht mag (mit "er" ist Delphi 7 gemeint) daher die Frage, wie kann ich PNG Bilder statt BMPs verwenden?

Außerdem würde ich mich gern über weitere Tipps freuen wie ich die Spielgeschwindigkeit hochschrauben kann. Wenn ihr dazu nähere Infos braucht, einfach fragen^^

Danke

bigben37 18. Dez 2008 20:06

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Also zu 1.
Delphi unterstützt keine PNGs (nur Delphi 2009 tut das). Es gibt zwar bestimmte Units, zum Beispiel Bei Google suchenPNGImage, mit denen man auch PNG-Bilder benutzen kann.

zu 2.
Da hab ich zwar direkten keine Tipps, aber du könntest ja Hier im Forum suchenAndorra 2D benutzen, das eignet sich eigentlich recht gut für solche Spiele (Damit hab auch schon ich recht gute Erfahrungen gemacht).

MFG, Benjamin

taaktaak 18. Dez 2008 20:08

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Hallo und Willkommen in der DP :hi:

Aufgrund der vorliegenden Informationen kann sicherlich keine qualifizierte Beantwortung deiner Frage erfolgen. Die möglichen Ursachen sind zu vielfältig.

fkerber 18. Dez 2008 20:10

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

Auch von mir herzlich Willkommen in der DP!

Könntest du dein Bild bitte in den Anhang packen?
Dann bleibt es auch erhalten, wenn der externe Server mal down ist und die Ladezeiten für Leute, die "nur mal reinschauen wollen", verringern sich.

Danke!


Ciao, Frederic

Berlinermauer 18. Dez 2008 20:12

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
HI, also Welcome :dp:

bmp's sind doch die die auch paint used, da hatn desktop 2-5 mb , deswegen..


du kannst mit nem Proggie wie paint.net oder iwas bestimmt die auflösung runterschrauben, oder ist dein pc einfach schlecht (CPU,RAM,GPU)

SirThornberry 18. Dez 2008 20:19

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
So wie du schreibst wird es immer langsamer je mehr Gegner etc. du hast. Das klingt für mich nach Performanceeinbußen beim Zeichnen. Und ob du nun pngs oder BMPs verwendest macht nicht viel Unterschied da im Speicher in beiden Fällen das Bild unkomprimiert ist.

Phill 18. Dez 2008 20:22

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

Danke für die schnellen Antworten und das Herzliche Willkommen (Bild nun im Anhang).
Leider MUSS ich Delphi benutzen um das Spiel zu programmieren (5te Prüfungskomponente)
An meinem Rechner geht es von der Geschwindigkeit, an den Schulservern ist es arg gedrosselt. Das ist bei einem Spiel bei dem es auf Reaktionsvermögen ankommt schon schlecht^^

Nähe Informationen zum spiel... naja, ich weiß halt nicht was relevant für die Rechnergeschwindigkeit ist (hab wirklich wenig Plan von sowas^^)


@SirThornberry: Kannst du den Gedanken noch zu ende führen? also kann man da was gegen machen? (Andere spiele haben ja auch Bilder^^)


Ich hab mal was von Pointern gehört, helfen die mir hier?

SirThornberry 18. Dez 2008 20:26

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Es wäre interessant zu wissen wie das Bild entsteht. Wenn du da TImages hinn und her bewegst wäre das eindeutig der Performancekiller.
Pointer sind wie der Name schon sagt Zeiger. Also etwas das irgendwo hinn zeigt (auf Speicher).
Ohne zu wissen wie du die grafische Ausgabe realisiert hast (am besten Quelltext zeigen und erklären) kann man dir kaum sagen was du verbessern kannst :-)

bigben37 18. Dez 2008 20:32

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Zu dem langsamer laufen: Ich denke, dass du einfach die Tasten abfragst und dann sagst: Player 5 nach rechts oder so. Aber da jeder PC unterschiedlich schnell läuft, ist natürlich auch die Geschwindigkeit unterschiedlich groß.
Du musst das mit TimeGap machen (Wie mann das genau macht, kann ich dir leider nicht sagen :oops: , abe die anderen können bestimmt helfen ;-))

Phill 18. Dez 2008 20:33

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
oh oh^^ ja glaube genau das mache ich.. also Bewegen tuhe ich alle Bilder via

Gegner[ii,i].IMG.top := Gegner[ii,i].IMG.top-10;

wenn jetzt noch ein Richtungswechsel dazu kommt und sich das Schiff um 90° dreht
Gegner[ii,i].IMG.Picture.LoadfromFile('G1b.bmp');

andere Schiffe wechseln mehrmals pro sekunde ihre Form :oops:

edit: ich denke in einem Level mit sovielen Gegnern wie im Anhang bewegen sich auf diese Art etwa 27 Timages

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 ;)

tr909 19. Dez 2008 11:39

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

8 February, 2004
HGE 1.2 has been released. The engine now supports Visual C++, Intel C++, Borland C++, Borland C++ Builder and MinGW32 compilers. Clipping regions, mouse wheel tracking, sprite flipping and font scaling features added. Unfortunately, Delphi and Visual Basic APIs are cancelled for now.

lbccaleb 19. Dez 2008 12:30

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

Zitat von tr909
Zu HGE
Zitat:

8 February, 2004
HGE 1.2 has been released. The engine now supports Visual C++, Intel C++, Borland C++, Borland C++ Builder and MinGW32 compilers. Clipping regions, mouse wheel tracking, sprite flipping and font scaling features added. Unfortunately, Delphi and Visual Basic APIs are cancelled for now.

Das ist richtig, aber es gibt es noch ;-)

Für Delphi bekommst du es hier:

Klickst du hier


und das Update für DirectX9 bekommst du hier:

Klickst Du hier

Ich hoffe das hilft weiter ;-)

PS: Würde dir raten die Header-Dateien zu überschreiben, damit DirectX9 unterstützt wird..

igel457 19. Dez 2008 16:32

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Ich würde behaupten, dass Andorra 2D einfacher zu verwenden ist, da es sich um nativen Delphi Code handelt.

Phill 19. Dez 2008 22:35

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

Zitat von lbccaleb
Zitat:

Zitat von tr909
Zu HGE
Zitat:

8 February, 2004
HGE 1.2 has been released. The engine now supports Visual C++, Intel C++, Borland C++, Borland C++ Builder and MinGW32 compilers. Clipping regions, mouse wheel tracking, sprite flipping and font scaling features added. Unfortunately, Delphi and Visual Basic APIs are cancelled for now.

Das ist richtig, aber es gibt es noch ;-)

Für Delphi bekommst du es hier:

Klickst du hier


und das Update für DirectX9 bekommst du hier:

Klickst Du hier

Ich hoffe das hilft weiter ;-)

PS: Würde dir raten die Header-Dateien zu überschreiben, damit DirectX9 unterstützt wird..

Ouf meine Fragen nehmen kein ende <.<
Hab mir mal beides geladen, hab die HGE.pas mit der neuen vom Update ausgetauscht und probeweise die .dpr von einem der tutorials geöffnet, versuche ich es zu starten geht er in die HGE.PAS und sagt mir:

uses
Classes, Windows, {$IFDEF HGE_DX8} DirectXGraphics {$ELSE} Direct3D9 {$ENDIF}, Bass, OpenJpeg;

[Fataler Fehler]HGE.pas(20): Datei nicht gefunden: 'Direct3D9.dcu'

ich guck mir jetzt erstmal andorra2d an, aber würde mich freuen wenn ihr auch für das Problem eine Lösung wüsstet.

(edit: merke grade das mir beim einbinden von engines noch einiges an Erfahrung fehlt.. andorra2d bekomm ich auch nicht zum laufen :( )

Danke

Namenloser 19. Dez 2008 22:44

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Engines sind ja schön, aber für den Anfang reicht es auch, wenn du das Zeichnen einfach selbst übernimmst, statt Komponenten zu benutzen. Bitte lies mal diesen Post von mir :wink:

lbccaleb 19. Dez 2008 23:59

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

Zitat von Phill
Zitat:

Zitat von lbccaleb
Zitat:

Zitat von tr909
Zu HGE
Zitat:

8 February, 2004
HGE 1.2 has been released. The engine now supports Visual C++, Intel C++, Borland C++, Borland C++ Builder and MinGW32 compilers. Clipping regions, mouse wheel tracking, sprite flipping and font scaling features added. Unfortunately, Delphi and Visual Basic APIs are cancelled for now.

Das ist richtig, aber es gibt es noch ;-)

Für Delphi bekommst du es hier:

Klickst du hier


und das Update für DirectX9 bekommst du hier:

Klickst Du hier

Ich hoffe das hilft weiter ;-)

PS: Würde dir raten die Header-Dateien zu überschreiben, damit DirectX9 unterstützt wird..

Ouf meine Fragen nehmen kein ende <.<
Hab mir mal beides geladen, hab die HGE.pas mit der neuen vom Update ausgetauscht und probeweise die .dpr von einem der tutorials geöffnet, versuche ich es zu starten geht er in die HGE.PAS und sagt mir:

uses
Classes, Windows, {$IFDEF HGE_DX8} DirectXGraphics {$ELSE} Direct3D9 {$ENDIF}, Bass, OpenJpeg;

[Fataler Fehler]HGE.pas(20): Datei nicht gefunden: 'Direct3D9.dcu'

ich guck mir jetzt erstmal andorra2d an, aber würde mich freuen wenn ihr auch für das Problem eine Lösung wüsstet.

(edit: merke grade das mir beim einbinden von engines noch einiges an Erfahrung fehlt.. andorra2d bekomm ich auch nicht zum laufen :( )

Danke

Mhhh ja klar, also das ganze ist trotz allem kein kinderspiel, egal für welche engine du dich entscheidest, du musst immer an eines denken, engins brauchen immer ein gewissen anteil an eigenaufwand!!! naja um die hge-demos zum laufen zu bekommen brauchst du natürlich (wie quasi vorher schon angedeutet) die directx 9.0 sdk, die headerdateien für delphi kannst du hier runterladen: :-)

Die Headers

hoffe das hilft dir weiter!!

Phill 20. Dez 2008 17:53

Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
 
Danke für die all die Hilfe, ich hab mir jetzt alles was ich für die Engines brauche geladen, werde es allerdings mit dieser Bitmap-Variante versuchen. Zwar hab ich noch überhaupt keine Ahnung wie das funktioniert aber ich denke als Neuling sollte ich mal durch sowas durch^^
Wenn jemand nen Quellcode rumliegen hat an dem ich sehe wie genau das gemacht wird wäre das natürlich trozdem nice :)
hab halt bisher nur mit timage gearbeitet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 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