Einzelnen Beitrag anzeigen

Aviator

Registriert seit: 3. Jun 2010
1.600 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: Tipps und Ratschläge für Spiel & für effizientes Programmieren

  Alt 27. Aug 2017, 21:48
Nabend,

also das mit dem Delay hast Du ja schon rausgefunden. Das ist eigentlich der Auslöser für die mega CPU Auslastung.

Vielleicht könntest Du, um von der Delay Methode wegzukommen, einen Standard-Timer starten der in einem 25ms Interval läuft. In der OnTimer Methode zählst du dann bspw. die Durchläufe. Je nach Anzahl der Durchläufe befindest du dich einem definierten Zustand und löst das Repaint Event des entsprechenden Grids aus. Im Grid wird der Status abgefragt und das entsprechende Image gemalt.

Kann man sicherlich ausbauen, aber es wäre mal ein Anfang. Zumindest ballerst Du dein Programm nicht mit der Messageverarbeitung voll was in dem Fall dann schon kontraproduktiv ist.


Zudem lädst Du immer wieder die Images aus einer Ressource in ein TImage. Das könntest Du einmalig beim Start des Spiels bzw. beim Programmstart machen. Das würde dann auch nochmal ein kleines bisschen Geschwindigkeit bringen.

Aber ansonsten schönes Spiel für den Anfang.


Allerdings muss ich mich trotzdem ziemlich durch den SourceCode kämpfen. Ich glaube wenn Du das Programm jetzt nochmal im Gesamten überarbeiten würdest und weißt worauf Du achten musst, dann wäre es sicherlich um einige Zeilen und Hilfsvariabeln kürzer. Aber perfekt lesbaren SourceCode schreiben kann sowieso niemand. Man verbessert sich nur mit der Zeit. Und ich würde sagen, dass Du da auf einem guten Weg bist. Weiter so

Noch ein Tipp: Beachte die Meldungen die Dir der Compiler auswirft und bearbeite die so schnell wie möglich. Wenn es irgendwann mal 100 oder gar 1000 sind, dann hast Du da kein Bock mehr drauf.

Zitat von Compiler:
[dcc32 Warnung] USchiff.pas(18): W1010 Methode 'Destroy' verbirgt virtuelle Methode vom Basistyp 'TObject'
[dcc32 Warnung] USchiff.pas(65): W1036 Variable 'index' ist möglicherweise nicht initialisiert worden
[dcc32 Hinweis] USchiff.pas(15): H2219 Das private-Symbol 'TrefferSindZusammenhaengend' wurde deklariert, aber nie verwendet
[dcc32 Warnung] UFlotte.pas(31): W1010 Methode 'Destroy' verbirgt virtuelle Methode vom Basistyp 'TObject'
[dcc32 Warnung] UFlotte.pas(325): W1036 Variable 'j' ist möglicherweise nicht initialisiert worden
[dcc32 Hinweis] Unit1.pas(154): H2164 Variable 'FirstTickCount' wurde deklariert, aber in 'TForm1.Delay' nicht verwendet
[dcc32 Hinweis] Unit1.pas(185): H2164 Variable 'rs' wurde deklariert, aber in 'TForm1.spieleFXab' nicht verwendet
[dcc32 Hinweis] Unit1.pas(186): H2164 Variable 'extension' wurde deklariert, aber in 'TForm1.spieleFXab' nicht verwendet
[dcc32 Hinweis] Unit1.pas(617): H2077 Auf 'spielende' zugewiesener Wert wird niemals benutzt
[dcc32 Hinweis] Unit1.pas(659): H2077 Auf 'spielende' zugewiesener Wert wird niemals benutzt
[dcc32 Hinweis] Unit1.pas(1056): H2164 Variable 'ResStream' wurde deklariert, aber in 'TForm1.FormCreate' nicht verwendet
[dcc32 Hinweis] Unit1.pas(79): H2219 Das private-Symbol 'm_DllDataSize' wurde deklariert, aber nie verwendet
[dcc32 Hinweis] Unit1.pas(80): H2219 Das private-Symbol 'mp_DllData' wurde deklariert, aber nie verwendet
[dcc32 Hinweis] Unit1.pas(81): H2219 Das private-Symbol 'mp_MemoryModule' wurde deklariert, aber nie verwendet
  Mit Zitat antworten Zitat