Jump to content
Unity Insider Forum

Inventarliste wird nicht aktualisiert


peachplayer
 Share

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...