Variablen Objekten zuordnen, auch wenn Objekt mehrmals auf der Map ist

  • GM 8

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

  • Variablen Objekten zuordnen, auch wenn Objekt mehrmals auf der Map ist

    Hallo zusammen,
    ich kenn mich mit den Variablen hier noch nicht so hundertprozentig aus. Und bevor ich verzweifle frage ich lieber hier nach, bis jetzt wurde hier immer gut geholfen :D

    Es geht um folgendes Problem:

    Ich habe ein Objekt. Diesem Objekt möchte ich Lebenspunkte zuordnen. Das würde ja einfach gehen mit:

    GML-Quellcode

    1. var global.lebenspunkte_soldat1=100;

    Ich möchte aber im Verlauf des Spiels diesen Soldaten produzieren können, d. h. es wird viele dieser Soldaten auf einer Map gleichzeitig geben. Trotzdem braucht jeder Soldat eine eigene Lebenspunktvariable.

    Würde ich eine objektbezogene Variable wählen, würde sie ja nur im Objektskript funktionieren, aber ich möchte ja, dass andere Objekte diese Variable beeinflussen.

    Also nochmal auf den Punkt gebracht:
    - Wie ordne ich demselben Objekt, mehrfach prodziert, jedem eine eigene Variable zu.
    - Wie beeinflusse ich die Variable eines Objektes durch ein anderes (was müsste ich dann in das andere Objekt schreiben)

    Ich möchte das gerne selber verstehen, deshalb bringt es wenig, wenn ich kommentarlos Skripte postet :D
    Ich will lernen und das selber anwenden. Vielleicht bekomme ich ja schonmal Denkanstöße von euch :)

    Gruß
    naibaf
    True story!
  • Du kannst auch auf lokale Variablen eines Objektes zugreifen. Nehmen wir an die Variable wird im Create-Event des Soldaten definiert:

    GML-Quellcode

    1. hp=100;


    Wenn du diese Variable jetzt von außerhalb des Objektes verändern willst, brauchst du sie nur über die ID der instanz anzusprechen. Also mit x.hp wobei das x durch die ID ersetzt wird. Die ID der instanz erhältst du von einigen Funktionen, du kannst aber in bestimmten Fällen auch mit dem keyword other auf eine bestimmte Instanz zugreifen (also other.hp z.B.)

    © 2008 by Teamgrill Productions
  • Nochmal langsam.
    Die ID ist demnach NICHT der Name des Objektes?
    "Die ID erhalte ich von verschiedenen Funktionen"

    Mal ein Szenario:
    Eine beliebige Instanz des Objektes obj_abc kollidiert mit einem anderen Objekt. Nun soll dieses Objekt erkennen, welche ID die Instanz des kollidierten abj_abc hat. Damit ich dann mit id.hp die HP dieser Instanz beeinflussen kann.
    WIe ich kollidiere überprüfe ist klar, es geht mir jetzt nur um das Herausfinden der Instanz-ID.
    Wie funktioniert das?

    MfG
    naibaf
    True story!
  • Also, eine Instanz von obj_abc kollidiert mit dem Objekt obj_xyz. obj_xyz soll die Variable hp von obj_abc (aber nur der betreffenden Instanz ändern)
    Dazu verwendest du im Kollisionsevent von obj_xyz mit obj_abc das vorher genannte keyword other. Also in deinem Fall other.hp = irgendein wert. Mit other in einem Kollisionsevent greift man automatisch auf die andere an der Instanz beteiligte Kollision zu.

    © 2008 by Teamgrill Productions
  • Danke master, das klingt logisch :) Hätte man auch selber drauf kommen können :/

    Ist other immer definiert als das EIN anderes Kollisionsobjekt?
    Wenn wir davon ausgehen, dass die Instanzen von obj_abc so laufen können, dass sie nicht kollidieren können, also das mehrere von ihnen ineinander stehen und jetzt das obj_xyz mit other.hp die Lebenspunkte verringert, sucht er sich dann
    a) eine zufällige Instanz des obj_abc mit dem er kollidiert
    b) die mit der er als erstes/als letztes kollidiert ist
    oder c) mit allen instanzen von obj_abc mit denen er kollidiert ist?

    Letzteres wäre schlecht, dann bräuchte ich eine weitere Lösung :D

    Aber danke schonmal :) sehr hilfreich :P

    gruß
    naibaf
    True story!
  • Das kommt darauf an, was danach mit obj_xyz passiert. Wenn du es bei Kollision löscht, trifft Fall b zu, also die erste Instanz, mit der es kollidiert ist, andernfalls werden natürlich auch andere betroffen (und auch mehrmals die gleichen, solange die Kollision besteht).

    © 2008 by Teamgrill Productions
  • Wenn ich einen Timer einbaue (Realitätsbezug: Schwingdauer des Schwertes 1,5 sekunden) dann verringert er die HP ja nur alle 1,5 Sekunden.
    Tut er dies dann aber an allen Objekten mit denen er kollidiert oder nur an einem? Sicherlich an allen oder?
    Gäbe es eine Möglichkeit, den "Angriff" so einzuschränken, dass lediglich 1(2,3,..) Instanzen betroffen sind? Ein Schwertkämpfer der mit einem Hieb auf alle Gegner einprügelt wäre definitiv nicht das, was ich haben will :D
    True story!
  • Ja, dann betrifft es alle. Du könntest mit dem Timer eine Variable setzen. Z.B. hit auf 0 beim Start des Schlages. Bei Kollision mit dem betroffenen Objekt führst du den HP-Abzug nur durch, sofern hit 0 ist (und setzt dann auch hit auf 1). So kann pro Schlag nur ein Gegner getroffen werden.

    © 2008 by Teamgrill Productions
  • Benutzer online 1

    1 Besucher