Von TLink auf Objekt schliessen
Übersicht

![]() |
TrustBetreff: Von TLink auf Objekt schliessen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
wie bekomme ich von einem TLink wieder an das eigentliche Objekt meiner selbst erstellten Klasse? Die Spielfigur sucht sich durch eine Routine den ihm am nähsten befindlichen Gegner, wurde einer gefunden, wird ein Schuss erstellt, welchem der Link vom Zielobjekt übergeben wird. Anhand diesem soll dieser Schuss zum Zielobjekt finden indem es Methoden vom Zielobjekt aufruft: Zielobjekt.GetX() und Zielobjekt.GetY(). Wurde das Ziel getroffen, soll der Schuss eine Methode zum applizieren des Schadens, vom Zielobjekt aufrufen: Zielobjekt.SubHp(self._damage) . Ich wollte dies auf diese weise lösen, um nicht jeden Schuss auf kollision mit jedem Gegner überprüfen zu müssen. Warum den TLink an den Schuss übergeben und nicht das eigentliche Zielobjekt? Weil der Schuss Objekte von verschiedenen Klassen als Zielobjekt haben kann und ich vorher nicht weiss von welcher Klasse das Zielobjekt ist. Der Schuss kann zB. von TPlayer erzeugt worden sein und TEnemy als Zielobjekt haben und umgekehrt. Mit meinLink.Value() geht es nicht, da kommt die Fehlermeldung: "Cannot convert from Object to TEnemy". |
||
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen. |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kannst du den betreffenden Code posten?
Ansonsten: TEnemy(meinLink.Value()) schon versucht? |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kannst du einen kleinen Code ausschnitt posten?
Als Tipp kann ich dir noch geben wegen dem Casten, erstelle eine Basis Klasse ala TObject und leite alle anderen Objekte davon ab (TPlayer, TEnemy) somit kannst du Standard Methoden nutzen und musst nicht vorher jede Klasse einzeln Casten. |
||
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge GPU: HIS HD 4870 1GB GDDR5 RAM: 4x 4GB DDR3-SDRAM Dual Channel |
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Alle Klassen ausser der Schuss (TShot) sind von einer Basisklasse TEntity abgeleitet.
Aktuell sieht der Code so aus ( welcher nicht funktioniert ): TShot Methode zum finden des Ziels: Beim ersten Aufruf von "targetEnemy.GetX()" kommt eine Fehlermeldung, weswegen ich den weiteren code nicht angepasst habe - deshalb steht in den darauffolgenden aufrufen noch "Self._targetLink.Value().GetY()" BlitzMax: [AUSKLAPPEN] ' Wenn target ein Enemy Die Methoden die überprüfen sollen von welcher Klasse das Zielobjekt ist: BlitzMax: [AUSKLAPPEN] Method IsEnemy:Byte(obj:Object) Und hier die Funktion zum erstellen eines Schusses: BlitzMax: [AUSKLAPPEN] Function Create(damage:Int, targetLink:TLink) Habe schon einiges durchprobiert, obiges ist nur die aktuellste Variante. |
||
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen. |
- Zuletzt bearbeitet von Trust am Mo, Nov 26, 2012 23:36, insgesamt 2-mal bearbeitet
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn doch schon alle Objekte (TTower und TEnemy von TEntity abgeleitet werden), warum geht das dann nicht so:
Code: [AUSKLAPPEN] TEntity(Self._targetLink.Value()).SubHp(Self._damage) Da: Code: [AUSKLAPPEN] Local targetEnemy:TEnemy = Self._targetLink.Value() müsstest du ja eh:
Code: [AUSKLAPPEN] Local targetEnemy:TEnemy = TEnemy(Self._targetLink.Value()) machen?
|
||
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge GPU: HIS HD 4870 1GB GDDR5 RAM: 4x 4GB DDR3-SDRAM Dual Channel |
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] SubHp(Self._damage)
ist eine Methode von TEnemy und TTower usw. diese ist TEntity nicht bekannt. Die Klasse TEntity ist wirklich komplett auf ein minimum reduziert: BlitzMax: [AUSKLAPPEN]
|
||
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen. |
- Zuletzt bearbeitet von Trust am Mo, Nov 26, 2012 21:57, insgesamt einmal bearbeitet
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
hast du die Zeile: Local targetEnemy:TEnemy = TEnemy(Self._targetLink.Value()) angepasst?
Und wenn ja was ist denn aktuell das Problem? mfg |
||
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge GPU: HIS HD 4870 1GB GDDR5 RAM: 4x 4GB DDR3-SDRAM Dual Channel |
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem ist, dass ich diese Lösung sehr umständlich finde bzw. wenn ich jetzt zB. 10 verschiedene Klassen habe die "abgeschossen" werden können, müsste ich jedesmal folgenden Code schreiben:
BlitzMax: [AUSKLAPPEN] If IsEnemy(Self._targetLink.Value()) Then Da wird der Code dann mit der Zeit zu unübersichtlich. Gibt es da keine elegantere Lösung? |
||
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen. |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Doch, gibt es: Die subHp-Methode schon in der Basisklasse definieren. | ||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und wenn du bei TEntity noch eine Methode hinzufügstm, Hit(dmg)
und dann so machst BlitzMax: [AUSKLAPPEN] ' Wenn target ein Enemy |
||
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge GPU: HIS HD 4870 1GB GDDR5 RAM: 4x 4GB DDR3-SDRAM Dual Channel |
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich wollte die Basisklasse MF_TEntity eigentlich unberührt lassen, da sie eine Klasse aus meiner persöhnlichen StandardLib ist, darum die Namenskonvention "MF".
Aber dann muss ich wohl doch eine weitere Basisklasse von dieser Klasse ableiten, speziel für dieses Projekt. Dachte es gibt vielleicht eine andere, bessere Lösung direkt mit TLink usw. ohne gleich mit neuen Klassen um sich zu schmeißen, nur um diese um so kleine Sachen zu erweitern. Vielen Dank für eure Hilfe ![]() |
||
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen. |
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo dann empfehle ich dir auch, in jedem Projekt eine TEntity klasse von MF_TEntity abzuleiten, dann ist alles sauber;) | ||
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge GPU: HIS HD 4870 1GB GDDR5 RAM: 4x 4GB DDR3-SDRAM Dual Channel |
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, werde ich jetzt auch immer so machen. Danke ![]() |
||
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group