Autor Beitrag
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Do 28.05.09 12:54 
HI,

ich bin grad dabei n Spiel zu programmieren. Dazu hab ich für das Hauptmenü und für die Level je eine Klasse erstellt.
Wenn das Progrmm startet wird das Hauptmenü erzeugt: MainMenu := TMainMenu.Create; Da kann man dann bisl rum suchen und sobald man dann ein Level gewählt hat wird das OnLevelSelected-Event aufgerufen. Und da drin hab ich jetzt versucht das Hauptmenü frei zu geben und dann das Level zu erstellen und zu laden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.MainMenuOnLevelSelected(LevelFile: String);
begin
  FreeAndNil(MainMenu);
  Level := TLevel.Create(LevelFiles+LevelFile, FontContextID);
  Level.OnClose := LevelOnClose;    
end;

genau so mach ich das wenn ich das Level beende und wieder ins Hauptmenü zurück will:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.LevelOnClose;
begin
  FreeAndNil(Level);
  MainMenu := TMainMenu.Create(FontContextID);
  MainMenu.OnClose         := MainMenuOnClose;
  MainMenu.OnLevelSelected := MainMenuOnLevelSelected;   
end;

Aber es kommt jedesma ne Zugriffsverletzung. Ich hab auch schon den Umweg über ne Variable probiert: Variable auf True und sobald ich (bzw. das Programm) dazu Zeit hat wird das jeweilige Objekt frei gegeben. Aber das hat nix geändert.
Irgendwie bin ich ratlos. Und ich will das Menu auch nicht im Hintergrund weiter laufen lassen, weil mir das zu viel Speicher frisst!
Kann mir da jmd helfen?

MfG & Thx Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: Do 28.05.09 13:43 
Hallo!

Wenn Du versuchst, eine Instanz einer Klasse in einer ihrer eigenen, selbst aufgerufenen Ereignis-Behandlungsmethoden freizugeben, dann kann es nur gewaltig krachen. Da musst Du dir wohl was anderes ausdenken.

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
Bergmann89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Do 28.05.09 13:53 
HI,

dehalb hab ich das ja mit den Variablen gemacht. Die variable wird auf der MainForm true gesetzt und dann wird das objekt das nächste ma frei gegeben wenn dazu zeit ist.
Aber ich glaub ich hab woanders n fehler. weil die Zugriffsverletzungen willkürlich kommen und nich immer an der selben stelle?!
Ich hab ne doppelt verkettete Liste implementiert und ich glaub da liegt der Fehler. Ich komm mit dem zeigern net ganz klar: Was is der Unterschied zwischen nem Zeiger auf ein Obekt und dem Objekt selber? Ich dachte immer wenn ich Objekte übergebe werden sowieso immer bloß die Adressen ausgetauscht und nicht das ganze Objekt an sich?! Also dachte ich das es ega ist ob ich TTest oder PTest übergeb (TTest = class; PTest = ^TTest)

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^