Inventar

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hi.
    Für den anfang:
    Ich bin ein Game Maker ''Noob''
    also ich schaffe schon 2D games usw.
    Nur mit codes kommt ich noch nicht so draus..
    Aber diesesmal will ich wissen wie man einen Inventar macht.
    Ihr müsst mir genau erklären,was, wie, wo ;)
    Es macht aber nichts wenn ich Codes eingeben muss..
    Danke im Voraus ;)
  • also, an Code wirst du nicht vorbeikommen ;)

    Das hier könnte für dich interessant sein, allerdings auch etwas schwer.
    henrik hat auch mal ein Inventar Tutorial geschrieben, vl hilft dir auch das.
    oder aber hier, wenn du genügend Englisch kannst... alles innerhalb von wenigen Sekunden mit hilfe von gefunden.

    ein bisschen Eigeninitiative ist doch nicht zuviel verlangt ? ;)
  • Bei einem Inventar gibt es 2 unterschiedliche Möglichkeiten.
    1: Das Inventar enthält alle IDs der Items die es gibt und speichert davon die Anzahl, die der Spieler besitzt.
    Das ist die optimale Lösung, wenn die Items keine änderbaren Eigenschaften haben und mehrere vorhanden sein können. (Heiltränke, Schlüssel, ...)
    2: Das Inventar hat n Plätze, wo du je ein Item hinein speicherst.
    Dann kannst du das Item nachher noch ändern. (Beispiel eine Waffe verstärken, Munition im Magazin...)

    Realisieren würde ich beides mit einer Map-Struktur.

    GML-Quellcode

    1. global.inventar = ds_map_create() // Inventar erstellen
    2. ds_map_add(global.inventar, 0, Anzahl oder Objekt) // Item(s) hinzufügen
    3. ds_map_find_value(global.inventar, 0) // Item wiedergeben

    Die 0 ist die Position im Inventar für Typ 2 oder die Objekt-ID für Typ 1.

    Wichtig wären vielleicht noch:
    ds_map_size(id) - Anzahl der gefüllten Itemplätze. (Nicht die Größe des Inventars)
    ds_map_replace(id,key,val) - Item/Anzahl ändern
    ds_map_delete(id,key) - Position löschen
    Den Rest kannst du ja aus der Hilfe entnehmen.

    Wenn du ein "aufgeräumtes" Inventar vom Typ 2 haben willst, kannst du auch eine ds_list nehmen, die erlaubt nähmlich keine Zwischenräume.

    P.S. Die Invs aus den Links von domis4 gehören beide zu Typ 2.
  • Wo hier das Thema schonmal angeschnitten wurde, hätte ich auch ne Frage dazu.
    Mein oben verlinktes Inventar (Drag and Drop) habe ich inzwischen auch um eine Menge pro Slot erweitert. Das habe ich mit einem zweiten Array gemacht in dem die Menge auf Position x gespeichert wird.

    Ich habe mir auch überlegt auf Maps umzusteigen, da hatte ich jedoch das Problem dass ich drei Werte brauche (Position, Item, Menge).
    Lt. der Hilfedatei kann man Maps nur nach keys oder nach Values durchsuchen, wobei auch nur der key bzw. value zurückgegeebn wird.
    Die Position müsste somit wieder in einem Seperaten Array gespeichert werden.

    Daher meine Frage:
    Gibt es eine Möglichkeit bei Maps den n-ten Wert abzufragen? Bzw. gibt es eine Funktion mit der man mehr als zwei zusammenhängende Werte speichern kann?
    Falls man mehrere Arrays vermeiden will fällt mir da sonst nur noch die Möglichkeit ein diese Daten in eine externe Datei zu speichern (was ich vermeiden will falls es eine elegantere Lösung gibt).
  • Du willst 2 Variablen Speichern und hast einen Referenzwert (Position). hm..?
    Dafür brauchst du 2. Maps

    ds_map_add(inv, position, ID);
    ds_map_add(anzahl, position, 500);

    Das kannst du dann sehr schön als Skript kappseln. Dann hast du weniger Schreibarbeit:
    inv_add_item(pos, id, anzahl);