AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Globalen und OOP

Ein Thema von fishbrain · begonnen am 8. Jan 2008 · letzter Beitrag vom 8. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2      
fishbrain

Registriert seit: 17. Sep 2007
Ort: Regensburg
132 Beiträge
 
#1

Problem mit Globalen und OOP

  Alt 8. Jan 2008, 15:05
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#2

Re: Warum funktioniert das nicht?

  Alt 8. Jan 2008, 15:08
Zeig doch mal die komplette Methode, wo Du EDir zuweist.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Warum funktioniert das nicht?

  Alt 8. Jan 2008, 15:09
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
fishbrain

Registriert seit: 17. Sep 2007
Ort: Regensburg
132 Beiträge
 
#4

Re: Warum funktioniert das nicht?

  Alt 8. Jan 2008, 15:10
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.
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
678 Beiträge
 
Delphi 12 Athens
 
#5

Re: Warum funktioniert das nicht?

  Alt 8. Jan 2008, 15:12
setze mal einen Breakpoint an die Stelle
  Enemy.Randdir; und gehe im Einzelschritt durch. Wo knallt es und mit welcher genauen Fehlermeldung?
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#6

Re: Warum funktioniert das nicht?

  Alt 8. Jan 2008, 15:13
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

Re: Warum funktioniert das nicht?

  Alt 8. Jan 2008, 15:14
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
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
fishbrain

Registriert seit: 17. Sep 2007
Ort: Regensburg
132 Beiträge
 
#8

Re: Warum funktioniert das nicht?

  Alt 8. Jan 2008, 15:22
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.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Warum funktioniert das nicht?

  Alt 8. Jan 2008, 15:36
Hallo,

wohl aber nicht als

Enemy:= TEnemy.Create; oder ?


Heiko
Heiko
  Mit Zitat antworten Zitat
fishbrain

Registriert seit: 17. Sep 2007
Ort: Regensburg
132 Beiträge
 
#10

Re: Warum funktioniert das nicht?

  Alt 8. Jan 2008, 15:39
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz