RTS Gruppenauswahl / Instanz eindeutig identifizieren

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

  • RTS Gruppenauswahl / Instanz eindeutig identifizieren

    Hallo,

    ich habe folgendes Problem: Ich habe ein RTS Spiel angefangen in denen sich die Einheiten als Gruppen bewegen sollen (später dan mit Formationen u.s.w.). Kämpfen soll allerdings jede Figur für sich. Zu diesem Zweck habe ich ein unsichtbares Gruppenobjekt und ein sichtbares Figurobjekt gemacht. Das Gruppenobjekt bekommt einige Figuren als Mitläufer und klappert dann die Wegpunkte ab welche der Spieler setzt.

    Bei einer Gruppe klapt das auch ganz gut, aber wenn ich nun mehrere Gruppen habe möchte ich das diese seperate Befehle bekommen können.
    Hier aber das Problemm: Da der Spieler das Gruppenobjekt nicht sieht muss er die Gruppe mit einem Klick auf ein Figurobjekt auswählen können. Da jedoch sowohl die Gruppen als auch die Figuren nur Instanzen von jeweils einem Objekt sind, diese öfters vorkommen, und erschwerend hinzukommt das die nähstgelegene Instanz nicht die richtige sein muss...

    Also kurz gesagt ich brauche sowas wie eine ID für die Gruppen, die ich jeder Figur mitgebe, damit diese ihrer Groupe später sagen kann, dass sie selektiert worden ist. Die InstazID läst sich hierfür nicht nehmen da sie laut Hilfe in jedem Step erneuert wird.

    Gibt es einen anderen Weg eine Instanz eindeutig zu identifizieren?
  • Mach doch, wenn du eine Gruppe, also das zugehörige Objekt erstellst, dass du zum Einen die instance_id sämtlicher zu diesem Zeitpunkt ausgewählten Einheiten in einer Liste oder einem Array des Gruppenobjektes speicherst, und zum Anderen in jeder ausgewählten Einheit eine Variable namens "Gruppe" anlegst, die die instance_id des Gruppenobjektes speicherst (wenn keine Gruppe existiert, sollte dort eine 0 sein). Wenn du nun eine Einheit auswählst, prüfst du, ob "Gruppe" den Wert 0 hat, und falls nicht, kannst du über diese Variable das Gruppenobjekt ansteuern, und über dessen Liste/Array sämtliche Einheiten dieser Gruppe.
  • Die Lösung ist einfach aber ich bezweifel das sie funktioniert da ich über folgende Zeilen in der Hilfe gestolpert bin:

    instance_find(obj,n) Gibt die id der (n+1)ten Instanz des Objektes obj an. obj kann ein Objekt oder das Schlüsselwort "all" sein. Wenn es nicht existiert, wird das besondere Objekt "noone" zurückgegeben. Beachte, dass sich die Zuordnung wieder bei jedem Schritt verändert, deswegen benutze nicht die Werte vorheriger Schritte....


    oder das Orginal:

    instance_find(obj,n) Returns the id of the (n+1)'th instance of type obj. obj can be an object or the keyword all. If it does not exist, the special object noone is returned. Note that the assignment of the instances to the instance id's changes every step so you cannot use values from previous steps...



    Auch wenn ich nicht verstehen warum ich eine ID habe die nicht gleich bleibt. Deswegen frage ich ja nach einer anderen Möglichkeit.
  • Öhm... Ok, zuerst möchte ich mich entschuldigen: Es passiert mir einfach immer wieder, dass ich, wenn ich die ID eines Objekts meine, von instance_id rede und denke, statt von id.
    Und dann glaube ich, dass du die Hilfe falsch verstanden hast: Die Variable "id", die jedes Objekt hat, gibt die einzigartige ID jedes Objekts wieder. Sie wird beim Erstellen des Objektes festgelegt, und ist dann nicht mehr veränderbar (bzw. wird diese Variable in der Hilfe auch als Konstante markiert). Dieser Hinweis, dass sich eine Zuordnung ändert, bezieht sich nur auf die Funktion instance_find(), also dass du beim Suchen der n+1. Instanz eines Objekts in jedem Step eine andere Instanz erhalten kannst. Wenn sich die ID jeder instanz in jedem Step ändern würde, wäre das zum einen direkt bei id in der Hilfe vermerkt worden, und zum anderen wäre dann viel nicht mehr möglich. Wenn man z.b. ein Objekt einem anderen folgen soll, muss ja angegeben werden, welchem Objekt es zu folgen hat, was auch wieder über die id geschieht. Und wenn die nicht über mehrere Steps hinweg konstant bleiben würde, wäre keine vernünftige Verfolgung möglich. Und das war nur ein Beispiel.
  • Ok du hast mich überzeugt. Ich habe deine Methode probiert und sie funktioniert! :)

    Dankeschön! :top:

    Das man mit dieser Methode andere Objekt verfolgen kann ist sehr interessant. Sowas hatte ich für mein letztes Spiel gesucht aber nicht gefunden. Ich glaube ich werde mich eine Weile damit beschäftigen, um das besser zu verstehen.

    Vielen Dank nochmal.