![]() |
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:
So nun is Edir in der Klasse TEnemy unter Public als Integer definiert:
randomize;
Edir := random(5);
Delphi-Quellcode:
Wenn ich es so mache kriege ich eine Fehlermeldung und das Programm hängt sich auf.
TEnemy = Class(TImageSpriteEx)
private public EDir : Integer; 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 |
Re: Warum funktioniert das nicht?
Zeig doch mal die komplette Methode, wo Du EDir zuweist.
|
Re: Warum funktioniert das nicht?
Zitat:
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. |
Re: Warum funktioniert das nicht?
Delphi-Quellcode:
wird per Timer aufgerufen :
Procedure TEnemy.randDir;
begin randomize; Edir := random(5); Form1.Timer2.Interval := random(2000)+1000; end;
Delphi-Quellcode:
Fehlermeldung:
procedure TForm1.Timer2Timer(Sender: TObject);
begin Enemy.Randdir; end; 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. |
Re: Warum funktioniert das nicht?
setze mal einen Breakpoint an die Stelle
Delphi-Quellcode:
und gehe im Einzelschritt durch. Wo knallt es und mit welcher genauen Fehlermeldung?
Enemy.Randdir;
|
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. |
Re: Warum funktioniert das nicht?
Delphi-Quellcode:
Und nicht vergessen, Enemy erst mal über Create zu erzeugen.
var
Enemy : TEnemy; randomize; Enemy.Edir := random(6); //wenns von 0..5 sein soll ...oups, zu spät ;) |
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. |
Re: Warum funktioniert das nicht?
Hallo,
wohl aber nicht als
Delphi-Quellcode:
oder ?
Enemy:= TEnemy.Create;
Heiko |
Re: Warum funktioniert das nicht?
nein
so:
Delphi-Quellcode:
Ä ich denke das ist nicht Falsch, aber wo kann ich Enemy := TEnemy.Create einbaunen das braucht ja nen Tsprite.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 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