Untergeordnete Klassen

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Untergeordnete Klassen

Beitrag von theo »

Verstehe nicht ganz.

Code: Alles auswählen

procedure TForm1.place(ABlock:TBlock;x1,y1,z1,x2,y2,z2:integer);
etc...
place(Holz,2,0,2,-2,0,-2);
Müsste doch gehen?
Wenn du jetzt innerhalb der procedure die Typen unterscheiden möchtest, kannst du es so machen:

Code: Alles auswählen

If ABlock is TWood then...
Oder noch besser: die verschiedenen TBlock Typen sagen/wissen selber, wo sie hingehören.
Dann brauchst du es nicht extra unterscheiden.

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Untergeordnete Klassen

Beitrag von PascalDragon »

Aloxen hat geschrieben:
Fr 9. Dez 2022, 00:36
So oder so ähnlich soll die Procedure aussehen:

Code: Alles auswählen

procedure TForm1.place([b]BlockType:TBlock[/b];x1,y1,z1,x2,y2,z2:integer);
Das Problem ist, dass TBlock nicht die Art Block enthält, sondern nur die Übergruppe für alle unterschiedlichen BLockarten. Gibt es einen Weg zu sagen, dass alles was TBlock vererbt bekommen hat hier eingegeben werden kann? Später sollte eine Eingabe dann so aussehen:

Code: Alles auswählen

place(TWood,2,0,2,-2,0,-2);
Du brauchst dann einen Klassentypen:

Code: Alles auswählen

type
  TBlockClass = class of TBlock;
  
  procedure TForm1.place(BlockType: TBlockClass; x1, y1, z1, x2, y2, z2: integer);
Aber besser wäre es wenn du deinem TBlock eine Methode Place gibst, der du die weiteren Parameter übergibst und in deinem Formular rufst du die Methode dann direkt auf statt deiner place im Formular.
FPC Compiler Entwickler

Aloxen
Beiträge: 58
Registriert: Di 31. Mai 2022, 17:40

Re: Untergeordnete Klassen

Beitrag von Aloxen »

Das sind alles sehr coole Lösungen. Ich habe eine Holzhackermethode verwendet und eine ID die ich sowieso in jeder Blockklasse vergeben habe, abfragen lassen:

Code: Alles auswählen

if BlockTypeID = TWood_1.BlockTypeID then ABlockList.Add(TWood_1.create(x,y,z));
Ich werde aber meine Code mit euren Ideen verbessern. @Theo das geht nicht was du vorgeschlagen hattest, dass habe ich gleich als erstes ausprobiert.
Ich verstehe noch nicht ganz was es bringt eine weitere Klasse ClassofBlock aufzumachen.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Untergeordnete Klassen

Beitrag von theo »

Aloxen hat geschrieben:
Fr 16. Dez 2022, 00:34
@Theo das geht nicht was du vorgeschlagen hattest, dass habe ich gleich als erstes ausprobiert.
Was genau geht nicht?

Antworten