"Zeiger" auf Type-Object zurückgeben

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Hubsi

Betreff: "Zeiger" auf Type-Object zurückgeben

BeitragSo, Okt 16, 2016 14:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß nicht recht wie ich mein Problem beschreiben soll. Vielleicht erstmal den Code mit dem ich das versucht habe:

BlitzMax: [AUSKLAPPEN]
Global playerlist:TList = CreateList()

Local rival:Object

' Noch mehr Code...

rival = FindRival(player:Tplayer, 400, 400)
DrawText rival.x, 100, 520 'Debug
' Hier bräuchte ich die Werte aus der playerlist

' Hier auch nochmal Code...

' Die Function dazu
Function FindRival:Object (player:Tplayer, range_x:Short, range_y:Short)
Local x:Int, y:Int, angle:Short, r:Object

For Local p:Tplayer = EachIn playerlist
If p.x + 32 < player.x + range_x And p.x > player.x - range_x Then
If p.y + 32 < player.y + range_y And p.y > player.y - range_y Then
' Von den range-Werten her erreichbar
' Prüfen ob die Map es auch hergibt
x = player.x + 16
y = player.y + 16
angle = ((ATan2(player.y + 16 - p.y + 16, player.x + 16 - p.x - 16) + 180) Mod 360)
While map_tile[(x + 16) / 32, (y + 16) / 32, 0] = 0
If x >= p.x And x <= p.x + 32 And y >= p.y And p.y <= + 32 Then
r = p:Tplayer
Exit
End If
x:+Cos(angle)
y:+Sin(angle)
Wend
End If
End If
If r <> Null Then Return r
Next
End Function


Der Compiler steigt mir bei dem DrawText mit der Meldung 'Indentifier x not found' aus. Heißt rival kann nicht für die playerlist verwendet werden? Oder kann man überhaupt verstehen was ich erreichen will? Mr. Green
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Thunder

Betreff: Re: "Zeiger" auf Type-Object zurückgeben

BeitragSo, Okt 16, 2016 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst das Object zum Typen casten, den es wirklich hat. Object hat nämlich keine Instanzvariable namens x.
also am besten:


BlitzMax: [AUSKLAPPEN]

Local rival:TPlayer

' Noch mehr Code...

rival = TPlayer(FindRival(player:Tplayer, 400, 400))
DrawText rival.x, 100, 520 'Debug


Falls das Object, das du zu casten versuchst, nicht von dem Typ ist, wird Null zurückgegeben. Wenn du aber weißt, dass in der Liste nur Instanzen vom Typ TPlayer (oder davon abgeleiteten Klassen) sind, dann kannst du das ignorieren
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Hubsi

BeitragSo, Okt 16, 2016 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Du bist meine Rettung, tausend Dank Very Happy Jetzt tun sich ganz neue Bugs auf Smile
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

FireballFlame

Betreff: Re: "Zeiger" auf Type-Object zurückgeben

BeitragSo, Okt 16, 2016 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Thunder hat Folgendes geschrieben:
Falls das Object, das du zu casten versuchst, nicht von dem Typ ist, wird Null zurückgegeben. Wenn du aber weißt, dass in der Liste nur Instanzen vom Typ TPlayer (oder davon abgeleiteten Klassen) sind, dann kannst du das ignorieren

Ist in diesem Fall irrelevant, da der zurückgegebene Wert der Funktion mit in einer "For Local p:Tplayer = EachIn playerlist"-Schleife gesetzt wird. ForEach-Schleifen durchwanderen eh nur Objekte des im Zähler angegebenen Typs (alle anderen werden übersprungen) und der Wert der FindRival-Funktion kommt in der Schleife durch ein "r = p" zustande. Es wäre hier also sinnvoller, r und den Rückgabewert der Funktion gleich als Tplayer zu deklarieren, dann kann ist auch kein Cast beim Aufruf nötig.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Thunder

Betreff: Re: "Zeiger" auf Type-Object zurückgeben

BeitragSo, Okt 16, 2016 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
FireballFlame hat Folgendes geschrieben:
Ist in diesem Fall irrelevant, da der zurückgegebene Wert der Funktion mit in einer "For Local p:Tplayer = EachIn playerlist"-Schleife gesetzt wird.


Ich habe mich auch nicht auf die Schleife bezogen, sondern auf die Zuweisung zur Variable 'rival'. Außerdem wollte ich zusätzliche Informationen liefern, die wichtig sein können, und ich habe darauf hingewiesen, dass das Prüfen auf Null unter bestimmten bedingungen s.o. nicht nötig ist.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group