[ziemlich gelöst] Denkfehler in Tlist's
Übersicht

![]() |
AnaBetreff: [ziemlich gelöst] Denkfehler in Tlist's |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
vielleicht stehe ich nur auf dem Schlauch, aber ich komme nicht auf meinen Fehler. Bei der untenstehenden Funktion sollte eigentlich das erste Enemie-Objekt zurück gegeben werden, dessen Distanz kleiner als Range ist und das nicht in der OldTarget List steht. Solange die OldTarget List = null ist, geht es auch wunderbar. Jedoch nicht wenn ein Enemie in der Liste steht. B und I sind nur für mich zur kontrolle im Debugger. Es ist immer i = 1, b = 1 und Enemielist > 1 disjunkt. Allerdings verstehe ich nicht warum. Wenn nur 1 Objekt in der Liste ist und mindestens 2 verschiede damit verglichen werden, dann kann doch nicht jedes Objekt enthalten sein? Vermutlich ein ganz dummer Denkfehler meiner seits aber ich komme nicht drauf ... BlitzMax: [AUSKLAPPEN] Function GetTarget:Enemie(g:GameObject,range:Int,OldTargets:TList = Null) Das Ganze passiert nicht, wenn ich die Enemielist nicht sortiere. Hab ich in der Compare Funktion einen Fehler gemacht? BlitzMax: [AUSKLAPPEN] Method Compare:Int(O:Object) Außerdem funktioniert das remove() der Tlist auch nicht mehr richtig. Daher hatte ich vermutet, dass die LinkedList datein vielleicht ausversehen von mir verwurschtelt wurden und BMax neu installiert, aber das hat nichts geändert. |
||
Don't only practice your art,
but force your way into its secrets, for it and knowledge can raise human to divine |
- Zuletzt bearbeitet von Ana am Mi, Sep 19, 2012 17:45, insgesamt 2-mal bearbeitet
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du solltest wissen, dass die Listen-Methoden Contains, FindLink und Remove alle auf der Compare-Methode des zu untersuchenden Objekts basieren. Wenn dieses beim Vergleich 0 zurücklieftert, gelten zwei Objekte als identisch. Ich denke damit sollten sich alle bei dir aufgetretenen Probleme erklären lassen.
Grundsätzlich halte ich es für ratsam die CompareMethode Zahlenwerte zurückliefern zu lassen, die angeben, wie nah die Objekte bei einander liegen (mit dem Vorzeichen als Indikator in welche Richtung). |
||
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux |
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah danke, das scheint das Problem zu lösen wenn ich die Compare Funktion so umschreibe
BlitzMax: [AUSKLAPPEN] Method Compare:Int(O:Object) Allerdings würde ich gerne verstehen warum ... Nutz Bmax dafür nicht Mergesort und da ist beim vergleichen doch nur interessant ob und nicht wie viel kleiner oder größer die Zahl ist? |
||
Don't only practice your art,
but force your way into its secrets, for it and knowledge can raise human to divine |
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, BlitzMax nutzt Merge-Sort und es reicht auch, nur -1, 0 oder 1 zurückzugeben, aber ich finde es leserlicher und für eigene Zwecke nützlicher, wenn gleich noch der Abstand zurückgegeben wird ![]() |
||
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux |
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gut, dann verstehe ich nicht warum das nun geht und vorher nicht. Aber immerhin geht es. Vielen Danke Lobby =) | ||
Don't only practice your art,
but force your way into its secrets, for it and knowledge can raise human to divine |
![]() |
Nova |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht hat das ganze auch etwas damit zu tun, dass du nicht 0 zurückgegeben hast, wenn die beiden length identisch waren. ![]() |
||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group