peachplayer Posted January 11 Report Share Posted January 11 Hallo Leute weiss jemand warum meine Inventar-liste beim Verkauf nicht reduziert wird? nur die Buttons in der ListBox(blau) werden entfernt, der rest bleibt immer gleich, resp. alle Maschinen werden nach einem Klick auf den Button 'verkaufen' auf einmal gelöscht. Siehe Bild! Ich verwende folgenden Code: public void RemoveSelected() { List<Inventory1> liste1 = MyXML.DeserializeFromXML<Inventory1>(".\\Maschinen.xml"); MaschinenAnzeige = ""; foreach (Inventory1 item1 in liste1) { MaschinenAnzeige += item1.Maschinennamen + item1.Menge + "\n"; } Debug.Log(MaschinenAnzeige); Maschinenanzeige.text = MaschinenAnzeige; Anzeige(); Transform t = content.transform.GetChild(selectedIndex); foreach (Inventory1 Inventory1Item in liste1) { if (FindIndex(t.gameObject) < -1 || FindIndex(t.gameObject) >= options.Count) return; else { // Remove UI component Destroy(t.gameObject); RemoveItem(Inventory1Item); options.RemoveAt(selectedIndex); Anzeige(); Debug.Log("selectedIndex = " + selectedIndex); } } } private int FindMaschinen_index(Inventory1 item) { int i = 0; foreach (Inventory1 Inventory1Item in liste1) { if (Inventory1Item.Maschinennamen == item.Maschinennamen) { return i; } i++; } return -1; } public void RemoveItem(Inventory1 item) { if (item.Menge > 0) { item.Menge--; Bargeld += item.Preis; } if (item.Menge == 0) { Bargeld += item.Preis; liste1.Remove(item); } } Quote Link to comment Share on other sites More sharing options...
Singular Posted January 13 Report Share Posted January 13 Ich steige durch den Code noch nicht ganz durch glaube ich. Aber ich sehe nichts, was darauf hindeutet, dass deine Liste überhaupt aktualisiert wird nachdem das Objekt aus der Liste geflogen ist. Was macht die Methode Anzeige? Wenn die dafür verantwortlich ist, dass deine UI aktualisiert werden soll, wäre die Frage was da passiert. Quote Link to comment Share on other sites More sharing options...
Singular Posted January 13 Report Share Posted January 13 Am 11.1.2022 um 21:16 schrieb peachplayer: foreach (Inventory1 Inventory1Item in liste1) { if (FindIndex(t.gameObject) < -1 || FindIndex(t.gameObject) >= options.Count) return; else { // Remove UI component Destroy(t.gameObject); RemoveItem(Inventory1Item); // <-- HIER options.RemoveAt(selectedIndex); Anzeige(); Debug.Log("selectedIndex = " + selectedIndex); } } Jetzt sehe ich was... Du versuchst in einer foreach Schleife ein Objekt aus der selben Liste zu löschen, die du gerade durch gehst. Bekommst du da keine Fehlermeldung? Wenn nicht, ist der scheinbar immer im if-Fall und führt das else nie durch. Aber ich verstehe auch nicht, warum du durch die Liste durch gehen musst. Warum rufst du nicht einfach eine Methode "SellItem" auf, die dann selber prüft: Habe ich das Objekt in der Liste? --> Wenn Ja : Entferne es aus der Liste und der Spieler bekommt Geld. --> Wenn Nein: Wirf den Spieler zurück, dass er nichts hat was er verkaufen kann. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.