Jump to content
Unity Insider Forum

Inventarliste wird nicht aktualisiert


peachplayer

Recommended Posts

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);
        }
    }

 

image.thumb.png.ce513a914e830c05e699dc076a6241ac.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

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

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...