Inventarproblem

  • GM 6
  • Inventarproblem

    Außerordentlich frustrierend. Ich hab wirklich absolut keinen Schimmer, was der Fehler sein kann.

    Also:

    Die eingesammelten Objekte werden in einem eindimensionalen array, global.inventory[argh], gesammelt, jedes Objekt hat eine eigene ID (so z.B. ist das Schwert die 1, der Heiltrank die 5...). Sammelt man nun ein Objekt ein, wird die erste freie Stelle gesucht:

    GML-Quellcode

    1. argh = 1
    2. while !global.inventory[argh] = 0 {
    3. argh += 1
    4. }

    und an der freien Stelle wird dann die ID des Objektes eingetragen.
    So weit, so gut. Aber das Objekt, welches das Inventar darstellt, macht jenes:
    Sammelt man ein Objekt ein, wird diesem in global.inventory[argh] zwar die richtige Position zu Teil, aber im Inventar wird es bei Position 27 angezeigt. Sammelt man ein zweites ein, wird das erste an der ursprünglichen Position 1 gezeigt, das neue an #27, und so weiter: Immer das zuletzt gesammelte Objekt kriegt die 27.
    Beim Erstellen des Inventars (also im Create-Event des Inventarobjekts) wird global.inventory[argh] einmal von 1-27 durchgegangen, um dann allen Stellen, die eine Objekt-ID haben, eine Position auf dem Grid zuzuweisen. Aus irgendeinem Grund (im Code nicht nachvollziehbar) wird dem letzten Objekt sowohl die [argh] Nr. 27 zugeteilt als auch die Koordinaten.

    GML-Quellcode

    1. //Hier stand mal Code. Grr.

    Wie gesagt, wenn man global.inventory[argh] überprüft (bei argh hierbei die Position einfügen, versteht sich), stimmt alles. Also muss es in diesem Stück Code liegen.

    Das Problem an der ganzen Sache ist nämlich, neben der falschen Position, dass wenn man das Objekt fallen lässt oder benutzt/ausrüstet, global.inventory[27] auf 0 gesetzt wird. Das Objekt steht aber bei global.inventory[1] drin, also ist es auch danach im Inventar und man kann quasi unbegrenzt viele erzeugen.
    Ich hab sicherlichst irgendwas übersehen. Aber was?

    Edit: Och Mensch, das passiert mir eindeutig zu oft. Kaum frag ich um Hilfe ists gelöst. Damn.
    Wie? Um Platz zu sparen, ist ein Teil des Codes nicht in der If-Clause gewesen und das bedeutet, dass der auch ohne dass eine der IDs erfüllt war was reingeschrieben hat. Das kann nicht gut sein. Wie genau das den Fehler verursacht hat weiß ich net aber es hat funktioniert, das in die if-clauses zu schreiben.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von HeartAttack ()

  • Benutzer online 1

    1 Besucher