Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit Globalen und OOP (https://www.delphipraxis.net/106277-problem-mit-globalen-und-oop.html)

fishbrain 8. Jan 2008 14:05


Problem mit Globalen und OOP
 
Hallo
ich hab wohl ein ganz grundlegendes Problem:
eine Variable EDir eine Zufallszahl von 0 bis 5 sein.
Delphi-Quellcode:
  randomize;
  Edir := random(5);
So nun is Edir in der Klasse TEnemy unter Public als Integer definiert:
Delphi-Quellcode:
   TEnemy = Class(TImageSpriteEx)
    private
    public
    EDir : Integer;
Wenn ich es so mache kriege ich eine Fehlermeldung und das Programm hängt sich auf.
Wenn ich Edir jedoch unter den Globalen Variablen dekliniere funktioniert alles einwandfrei.
Für mich ergibt das keinen Sinn. Ist das ein Überlegungs oder ein Programmierfehler?
Vllt kann mir ja jemand helfen. Danke schonmal

DeddyH 8. Jan 2008 14:08

Re: Warum funktioniert das nicht?
 
Zeig doch mal die komplette Methode, wo Du EDir zuweist.

Luckie 8. Jan 2008 14:09

Re: Warum funktioniert das nicht?
 
Zitat:

Zitat von fishbrain
ich hab wohl ein ganz grundlegendes Problem:

Kann ich bestätigen:
1. Dein Threadtitel ist wenig bis gar nicht aussagekräftig und sagt nichts über das Problem aus.
2. "kriege ich eine Fehlermeldung" ist keine hinreichend genau Fehlermeldung.

fishbrain 8. Jan 2008 14:10

Re: Warum funktioniert das nicht?
 
Delphi-Quellcode:
Procedure TEnemy.randDir;
begin
  randomize;
  Edir := random(5);
  Form1.Timer2.Interval := random(2000)+1000;
end;
wird per Timer aufgerufen :
Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
  Enemy.Randdir;
end;
Fehlermeldung:
Im Projekt TRPG1.exe ist eine Exeption der Klasse $C00000005 mit der Meldung 'access violation at 0x00486716 :write of adress
0x00000c0 aufgetreten.

Wenn ich dann auf Anhalten klicke kommt :

Ausführungspunkt nicht verfügbar.

joachimd 8. Jan 2008 14:12

Re: Warum funktioniert das nicht?
 
setze mal einen Breakpoint an die Stelle
Delphi-Quellcode:
  Enemy.Randdir;
und gehe im Einzelschritt durch. Wo knallt es und mit welcher genauen Fehlermeldung?

DeddyH 8. Jan 2008 14:13

Re: Warum funktioniert das nicht?
 
1. Randomize sollte einmalig aufgerufen werden.
2. Wieso greifst Du in einer Klassenmethode auf eine Instanz einer anderen Klasse (hier Form1) zu? Das gehört dort IMO nicht hin.

Progman 8. Jan 2008 14:14

Re: Warum funktioniert das nicht?
 
Delphi-Quellcode:
var
  Enemy : TEnemy;

  randomize;
  Enemy.Edir := random(6); //wenns von 0..5 sein soll
Und nicht vergessen, Enemy erst mal über Create zu erzeugen.

...oups, zu spät ;)

fishbrain 8. Jan 2008 14:22

Re: Warum funktioniert das nicht?
 
Also Enemy:TEnemy hab ich unter Tform1 Public dekliniert.
Tenemy.create ist ca 3 sek vor dem ersten Aufruf der Methode schon ausgefürht worden.
Gut das mit dem Timerintervall ändern kommmt da nicht hin. Ändert aber nichts am Problem.
Und ist von 0 bis 4 sry.

hoika 8. Jan 2008 14:36

Re: Warum funktioniert das nicht?
 
Hallo,

wohl aber nicht als

Delphi-Quellcode:
Enemy:= TEnemy.Create;
oder ?


Heiko

fishbrain 8. Jan 2008 14:39

Re: Warum funktioniert das nicht?
 
nein
so:
Delphi-Quellcode:
constructor TEnemy.Create(AParent: TSprite);
begin
  inherited Create(AParent);
  EDir := 2;
  animspeed := 15;
  Alpha := 255;
  randomdir := 0;
  randtime := 0;
  Color := RGB(255,255,255);
  z := 0;
end;
Ä ich denke das ist nicht Falsch, aber wo kann ich Enemy := TEnemy.Create einbaunen das braucht ja nen Tsprite.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 Uhr.
Seite 1 von 2  1 2      

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