peachplayer Geschrieben 11. Januar 2022 Melden Share Geschrieben 11. Januar 2022 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); } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Singular Geschrieben 13. Januar 2022 Melden Share Geschrieben 13. Januar 2022 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. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Singular Geschrieben 13. Januar 2022 Melden Share Geschrieben 13. Januar 2022 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. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.