![]() |
Problem mit mehreren Typen in unterschiedlichen Units!
Hi!
Ich hab folgendes Problem. Ich erstelle gerade ein KLEINES Spielchen, mit mehreren Units, auf welchen jeweils eine Klasse und deren Routinen drauf sind. Ausgangspunkt: ![]()
Delphi-Quellcode:
unit U_Main;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons,U_Hero, jpeg, ComCtrls, Menus, U_Items; type TForm1 = class(TForm) P_Intro: TPanel; L_INtro: TLabel; [...] procedure FormCreate(Sender: TObject); [...] private { Private-Deklarationen } public { Public-Deklarationen } end; var Hero : THero; Trank : TItems; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Hero := THero.Create; Trank := TItems.Create; Hero.HPSpeichern(50); Hero.MaxHPSpeichern(200); Trank.PunkteSpeichern(50); end; procedure TForm1.Button1Click(Sender: TObject); begin Trank.ItemUse; end; end.
Delphi-Quellcode:
unit U_Hero;
interface uses Messages, Dialogs, Sysutils; type THero = class (TObject) private Lebensenergie : Integer; MaxHP : Integer; public procedure HPSpeichern(Wert : Integer); procedure MaxHPSpeichern(Wert : Integer); function HPAuslesen : Integer; end; implementation procedure THero.HPSpeichern(Wert : Integer); begin Lebensenergie := Wert; end; procedure THero.MaxHPSpeichern(Wert : Integer); begin MaxHP := Wert; end; function THero.HPAuslesen : Integer; begin Result := Lebensenergie; end; end.
Delphi-Quellcode:
unit U_Items;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Menus, ExtCtrls, StdCtrls, U_Hero; type TItems = class (TObject) private HPReg : Integer; public procedure PunkteSpeichern(Wert : Integer); procedure ItemUse; end; var Hero : THero; implementation procedure TItems.PunkteSpeichern(Wert : Integer); begin HPReg := Wert; end; procedure TItems.ItemUse; begin Hero.HPSpeichern((Hero.HPAusgeben+HPReg)); end; end. Also, ich will, dass ich vom Formular aus eine Routine aus U_Item aufrufen kann und diese Routine einen Wert in U_Hero ändert. Man sieht schon, dass das nicht funktionieren kann... ich habe aus Verzweiflung die Variable "Hero : THero" in der U_Items Unit nochmal deklariert, weil "unbekannter Bezeichner (Hero)" als Fehlermeldung kam. Jetzt kennt er zwar "Hero", aber "Hero" wird hier nicht created, also gibts nen Speicherfehler. Und WENN ich "Hero" hier create, dann ist das ein eigener "Hero", der mit dem auf dem Formuler createden nichts zu tun hat. Ich hab einfach vergessen, wie ich das alles verknüpfen muss, dass das so geht, wie ich das möchte :D Hoffentlich könnt ihr mir schnell und einfach helfen, bin noch nicht so weit ;) Grüße! |
Re: Problem mit mehreren Typen in unterschiedlichen Units!
Hi :-)
Übergib doch einfach den Hero als Parameter an ItemUse. Gruß Hudel |
Re: Problem mit mehreren Typen in unterschiedlichen Units!
Das versteh ich jetzt nicht genau... wie gesagt ich bin noch nicht so weit. Ich will das ja so machen, weil der Held im Spiel viel mehr als nur die LebensEnergie hat... und mit den "Monstern" ist es genau so... hab den QT extrem beschnitten, damit es nicht so unübersichtlich ist :)
Grüße! |
Re: Problem mit mehreren Typen in unterschiedlichen Units!
Herzlich willkommen in der Delphi-PRAXiS, Alexander.
Eine gute Vorgehensweise ist folgende:
Delphi-Quellcode:
So kannst du von überall her lesend auf Form1.Hero zugreifen, sobald du in den anderen Units in der implementation section die Uses-Klausel um die Unit U_Main erweitert hast.
unit U_Main;
interface // ... type TForm1 = class(TForm) P_Intro: TPanel; L_INtro: TLabel; // ... procedure FormCreate(Sender: TObject); // ... private FHero: THero; public property Hero: THero read FHero; end; // ... implementation // ... procedure TForm1.FormCreate(Sender: TObject); begin FHero := THero.Create; // ... end; Freundliche Grüße vom marabu |
Re: Problem mit mehreren Typen in unterschiedlichen Units!
Damit kann ich schonmal was anfangen, super :)
Aber wenn ich jetzt in den anderen Units in die Uses "U_Main" schreibe, sagt er mir, dass sich das überkreuzt :wall: Grüße! Edit: Ach sorry, "implementation" überlesen :D Jetzt spuckt er folgende Fehler aus: Feld oder Methodenbezeichner erwartet Einer "nur-lesen" Eigenschaft kann kein wert zugefügt werden Lesen einer "nur-schreiben" Eigenschaft nicht möglich :wall: Grüße! |
Re: Problem mit mehreren Typen in unterschiedlichen Units!
Oh lol!!!
Allein, wenn ich "uses U_Main" in den implementation Teil schreibe funzt alles :) DANKE!!!! |
Re: Problem mit mehreren Typen in unterschiedlichen Units!
Zitat:
Du musst immer im Hinterkopf bewahren, dass Delphi einen single pass compiler benutzt. Er wird erst alle units durchlaufen, die in der interface uses clause stehen (und auch in der Reihenfolge). Danach die in der implementation uses clause. Auf die Art können sich 2 Units gegenseitig "sehen", wenn auch mit der Einschränkung, dass mindestens eine von beiden es nur in der implementation section kann. Absolut abstrakter Bleistift, dessen sinnloser Inhalt nicht zu Hause nachgemacht werden sollte:
Delphi-Quellcode:
unit Unit1;
interface type TClass1 = class public procedure DoSomething; end; implementation uses Unit2; procedure TClass1.DoSomething; begin if self is TClass2 then blabla else blabla; end; end.
Delphi-Quellcode:
unit Unit2;
interface uses Unit1; type TClass2 = class(TClass1) end; implementation end. |
Re: Problem mit mehreren Typen in unterschiedlichen Units!
Muhaha das ist so geil...
Meine Monster wählen sich jetzt selbstständig ihre Zauber und Angriffe aus (halt je nach Monster) und zum Items benutzen brauch ich jetzt z.B. nurnoch sagen Trank.ItemUse und so :) 1000 Dank! Grüße! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 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