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 |
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 PNGImage, mit denen man auch PNG-Bilder benutzen kann. zu 2. Da hab ich zwar direkten keine Tipps, aber du könntest ja Andorra 2D benutzen, das eignet sich eigentlich recht gut für solche Spiele (Damit hab auch schon ich recht gute Erfahrungen gemacht). MFG, Benjamin |
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. |
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 |
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) |
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.
|
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? |
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 :-) |
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 ;-)) |
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 |
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 |
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.
|
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) ) |
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) |
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 |
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: |
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) |
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. |
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? |
Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
Zitat:
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 (BitBlt) 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 ;) |
Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
Zu HGE
Zitat:
|
Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
Zitat:
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.. |
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.
|
Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
Zitat:
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 |
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:
|
Re: Delphi Programm zu Speicherlastig? (läuft sehr langsam)
Zitat:
Die Headers hoffe das hilft dir weiter!! |
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