AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Tipps und Ratschläge für Spiel & für effizientes Programmieren

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

Ein Thema von Danny92 · begonnen am 27. Aug 2017 · letzter Beitrag vom 5. Sep 2017
Antwort Antwort
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

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

  Alt 28. Aug 2017, 19:42
Ja cnPack hab ich soeben schon mal installiert. Was soll ich sagen? Es sieht schon mal prima aus! Im Destroy-Ereignis gebe ich die Bitmap im Array wieder frei. Damit konnte ich die Speicherleaks auf folgende im Anhang reduzieren. Aber was ist der Rest? Ich vermute mal, das hat wieder irgendwas mit der Bass.dll aus der Ressource zu tun. Ich hab mich damit wie gesagt noch nie so intensiv beschäftigt...
Mit dem StyleGuide werde ich mir mal intensiver beschäftigen. Und mit einem sog. Duplicate Code Finder 1.0 konnte ich lediglich eine Stelle in der SetzeFlotte-Prozedur finden, die sich wiederholt; das werde ich auch noch besser machen und einfach ein Array draus machen, in dem ich beide Flotten speichere. Dann fallen die unterschiedlichen Bezeichner weg, was das Verdoppeln überflüssig macht.

Aber die Speicherleaks sind mir gerade noch ein Rätsel...
PS: Denglisch war schon oft mein Problem.
Miniaturansicht angehängter Grafiken
speicherleaks.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

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

  Alt 29. Aug 2017, 05:31
Okay jetzt habe ich die Speicherlecks gefunden. Einmal hab ich in TFlotte.Destroy vergessen, die einzelnen Schiffe im Array wieder freizugeben.
Und das andere Leck war etwas schwieriger zu finden: Im Destroy-Ereignis der Form hat noch ein
Delphi-Quellcode:
BTMemoryFreeLibrary(mp_MemoryModule);
  FreeMemory(mp_DllData);
gefehlt.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.474 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 29. Aug 2017, 06:08
Hallöle...
Zitat:
Ja cnPack hab ich soeben schon mal installiert.
Ein großer Werkzeugkasten, wo man nicht alles braucht, der dir aber das Leben erleichtert. Ein paar Optionen in der IDE solltest du deakivieren. (Optionen1+2)
1: Die Linien von Castalia können weg, es sein denn du magst die dünnen Linien lieber. Dann mußt du die Linien im CnPack abschalten.
2. Programmierhilfe: Die vom CnPack ist deutlich besser. Die findet auch Teilstrings. Nur doppelt suchen ist langsam...
Zitat:
Duplicate Code Finder 1.0 konnte ich lediglich eine Stelle in der SetzeFlotte-Prozedur finden, die sich wiederholt
DRY ist was anderes. Du hast Glück. Für meine Sprachtherapie habe ich einen Mini Vortrag über DRY gehalten. (Anhang) Fällt dir zwischen Seite 5 und 6 was auf?



Nachtrag DRY:

aus deinem Code:
Delphi-Quellcode:
procedure TForm1.LeuchteKnopfTimer(Sender: TObject);
begin
  if not playerhasshot
  then
  if blinkcount<25 then
  begin
    if BoxPlayer.Color=clRed
    then BoxPlayer.Color:=clNavy
    else BoxPlayer.Color:=clRed;
    LeuchteKnopf.Interval:=random(80)+21;
    Inc(blinkcount);
  end else
  begin
    blinkcount:=0;
    LeuchteKnopf.Enabled:=False;
    LeuchteKnopf.Interval:=1;
    BoxPlayer.Color:=clNavy;
  end
  else
  if blinkcount<25 then
  begin
    if BoxKI.Color=clRed
    then BoxKI.Color:=clNavy
    else BoxKI.Color:=clRed;
    LeuchteKnopf.Interval:=random(80)+21;
    Inc(blinkcount);
  end else
  begin
    blinkcount:=0;
    LeuchteKnopf.Enabled:=False;
    LeuchteKnopf.Interval:=1;
    BoxKI.Color:=clNavy;
  end;
end;
besser:
Delphi-Quellcode:
procedure TForm1.LeuchteKnopfTimer(Sender: TObject);
begin
  if not playerhasshot then
  begin
    LightingButton(BoxPlayer);
  end
  else
  begin
    LightingButton(BoxKI);
  end
end;
ausgelagert z.B. als private procedure:
Delphi-Quellcode:
procedure TForm1.LightingButton(GroupBox: TGroupbox);
begin
  if blinkcount < 25 then
  begin
    if GroupBox.Color = clRed then
      GroupBox.Color := clNavy
    else
      GroupBox.Color := clRed;
    LeuchteKnopf.Interval := random(80) + 21;
    Inc(blinkcount);
  end
  else
  begin
    blinkcount := 0;
    LeuchteKnopf.Enabled := False;
    LeuchteKnopf.Interval := 1;
    GroupBox.Color := clNavy;
  end;
end;
Miniaturansicht angehängter Grafiken
optionen1.png   optionen2.png  
Angehängte Dateien
Dateityp: pdf Logo Vortrag.pdf (93,9 KB, 21x aufgerufen)

Geändert von haentschman (29. Aug 2017 um 06:51 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:12 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-2025 by Thomas Breitkreuz