casting mit Sortieren von Listen über method compare
Übersicht

JamesBlondBetreff: casting mit Sortieren von Listen über method compare |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Blitz-Community!
Ich habe ein Problem mit dem Sortieren von Waffen, die ein Spieler in der Hand hält. Hier ist das Type der Waffen, welches eine Waffe erstellen kann und in dem die original compare-Methode überschrieben wird. Code: [AUSKLAPPEN] Type tWaffe Field name:String Field slot:Int Method Compare(Obj:Object) If tWaffe(Obj).slot < slot Return 1 Else Return -1 EndMethod Method Create:tWaffe(_name:String,_slot:Byte) name = _name slot = _slot Return Self End Method End Type Das ist ein Spieler, der eine Waffe in die Hand bekommt, welche nach dem Slot sortiert wird. Code: [AUSKLAPPEN] Type tSpieler Global list:TList = New(TList) Field waffen:TList Field linkWaffe:TLink Field waffe:tWaffe Method New() list.AddLast(Self) waffen = CreateList() waffe:tWaffe = New tWaffe End Method Method cast() waffe = tWaffe(linkWaffe.value()) End Method Method wechsleWaffe() If KeyHit(tasten.waffeUp) Then linkWaffe = linkWaffe.nextlink() If Not linkWaffe Then linkWaffe = waffen.findLink(waffen.first()) End If If KeyHit(tasten.waffeDown) Then linkWaffe = linkWaffe.prevlink() If Not linkWaffe Then linkWaffe = waffen.findLink(waffen.last()) End If End Method Method addWaffe(waffe:tWaffe) waffen.addLast(waffe) End Method Method sortWaffen() waffen.sort(True) 'Sortieren funktioniert: 'For Local w:tWaffe = EachIn waffen 'Print "Name: "+w.Name+" Score:"+w.Slot 'Next linkWaffe = waffen.findLink(waffen.first()) End Method End Type Ich erhalte folgende Fehlermeldung, wenn die Methode cast() aufgerufen wird: "Unhandled Exception:Attempt to access field or method of Null object" Kann mir jemand den Fehler erklären? Kann man mit einer überschriebenen Compare Methode nicht casten? Das Sortieren an sich funktioniert. Wenn ich nach waffen.sort die liste ausgebe, dann ist alles wunderbar sortiert. Vielen Dank im voraus für eure Unterstützung! |
||
![]() |
Artemis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Unhandled Exception:Attempt to access field or method of Null object
bei diesem Code: Code: [AUSKLAPPEN] waffe = tWaffe(linkWaffe.value())
heißt sehr wahrscheinlich einfach, dass linkWaffe gleich Null ist, also nicht auf ein richtiges Objekt zeigt. Nur wenn du vor dem Aufrufen von cast() oder wechsleWaffe() die Methode sortWaffen() aufrufst zeigt linkWaffe auf ein Objekt (und dass auch nur, wenn mindestens eine Waffe existiert. |
||
JamesBlond |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi Artemis!
Natürlich rufe ich vor cast() die Methode sortWaffen() auf und es existieren ebenfalls Waffen. Wenn ich die Compare-Methode von tWaffe auskommentiere, funktioniert der Code. mfg JamesBlond |
||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] linkWaffe = waffen.findLink(waffen.first())
ist das nicht das gleiche wie Code: [AUSKLAPPEN] linkWaffe = waffen.firstLink() nur so btw...
|
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
JamesBlond |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey, danke! Damit funktionierts. Kannst du den Unterschied erklären? | ||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
ahhh, jetzt weiß ich glaub ich deinen fehler.
es liegt wirklich an deiner comparefunction: Code: [AUSKLAPPEN] Method Compare(Obj:Object)
Das wichtige dabei ist das "return 0". Die TList.findLink() Methode überprüft nämlich mittels der compare funktion ob die Objekte gleich sind (compare=0) und wenn du nur -1 oder 1 zurückgibst sind sie dem Anschein nach nie gleich. If tWaffe(Obj).slot < slot Return 1 ElseIf tWaffe(Obj).slot > slot Return -1 Else Return 0 EndMethod ![]() |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
JamesBlond |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey, das ist sehr einleuchtend! Danke! | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group