Einzelnen Beitrag anzeigen

Passi077

Registriert seit: 7. Okt 2004
23 Beiträge
 
#1

OOP: Bidirektionale Beziehung zw. Klassen [erledigt]

  Alt 16. Apr 2006, 16:20
Hi,

ich bin gerade dabei eine PartikelEngine zu programmieren. Das Ganze soll objektorientiert geschehen.

Dazu habe ich 2 Klassen erstellt: cParticleEffekt und cParticle:

Delphi-Quellcode:
type cParticle=class
   private
     thePosX, thePosY: real;

     procedure setVelocity(pVelocity: Velocity3f);
     procedure Kill();
end;

type cParticleEffekt=class
  private
    theMaxParticleCount: integer;
    theTime: real;

    particle: array of cParticle;

  public
    procedure Calculate(t: real);
    procedure addParticle(pIndex, pPreset: integer);

    constructor create(pMaxParticles: integer);

  end;
Nun muss ich zwischen diesen beiden Klassen eine bidirektionale Beziehung aufbauen, damit

a) die Klasse cParticleEffekt auf die einzelnen Partikel zugreifen kann und diese berechnen kann
b) die Klasse cParticle Zugriff auf Variablen der Klasse cParticleEffekt hat, welche sich global auf alle Partikel auswirken

Leider bin ich damit überfordert. Ich wollte die Klasse cParticle von der cParticleEffekt Klasse abhängig machen und habe das Ganze so modelliert:

Delphi-Quellcode:
type cParticle=class
   private
     thePosX, thePosY: real;
[b] ParticleEffekt: cParticleEffekt; [/b]

     procedure setVelocity(pVelocity: Velocity3f);
     procedure Kill();

[b] constructor create(pParticleEffekt: cParticleEffekt); [/b]
end;

type cParticleEffekt=class
  private
    theMaxParticleCount: integer;
    theTime: real;

  [b] particle: array of cParticle; [/b]

  public
    procedure Calculate(t: real);
    procedure addParticle(pIndex, pPreset: integer);

    constructor create(pMaxParticles: integer);

  end;
Jetzt kennt die Klasse cParticle aber natürlich den Datentyp cParticleEffekt noch nicht.. wenn ich das Ganze umdrehe im Code, dann kennt eben die Klasse cParticleEffekt den DAtentyp cParticle nicht, und das ist mein Problem.

Wie muss ich das korrekt modellieren, damit es realisierbar ist?

Oder: Wie erstelle ich die Signatur einer Klasse? Also sowas in der Art:

Delphi-Quellcode:
type cParticleEffekt=class
end;
Sozusagen eine leere Klasse. Leider kommt dann die Meldung bei der richtigen Klasse, dass der Bezeichner redefiniert wird..

Danke + Grüße
Passi
  Mit Zitat antworten Zitat