RTS Pathfinding problem

  • GM 7

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

  • RTS Pathfinding problem

    Hi, ich habe folgendes Problem:
    Ich hab mal aus Spass angefangen etwas in die Richtung RTS zu machen.(Pathfinding)
    Also hab ich das Pathfinding programmiert ( Ein Object //ausgewählt durch Auswahlviereck// bewegt sich zu einem mit l-klick erstelltem Wegpunkt).
    Das hat auch prima geklappt, allerdings immer nur mit dem erst erstelltem Obj, oder mit mehreren Obj, dann musste aber in dieser Gruppe das erst erstellte Obj sein.
    Das heisst: Nur das erst-erstellte Obj, wenn es einzelnd ausgewählt ist, bewegt sich zu dem Wegpunkt. Wenn ein anderes Obj(vom gleichem Typ-nur mit einer anderen ID)
    einzelnd ausgewählt wird und der Wegpunkt gesetzt wird, bewegt es sich nicht zum Wegpunkt.
    Beim Debuggen fand ich herraus, das sich eine Bool-Var bei allen Obj dieses Typs (also von dem ObjTyp, das sich zum Wegpunkt bewegen soll) auf 0 befand ausser von dem erst-erstelltem . ( Wenn die Var auf 1 , bewegt sich das Obj zu dem Wegpunkt)
    Jetzt frag ich mich wieso? Ich meine ich dachte immer, alle Obj eines Types sind gleich, ich wusste nicht das es passieren kann das ein anderes Obj dieses Types etwas macht was das andere dieses Types nicht macht Oo`?

    @ Ich wusste nicht wie ich es besser erklären soll, falls es jmd. nicht verstanden hat werd ich gerne mein RTS Example zum Download preisgeben :D

    edit:
    Gamemaker data von dem Problem:
    file-upload.net/download-1731040/Problem.gmk.html
    // beide aushwählen, wegpunkt setzen = geht
    // obere obj auswählen, wp setzen = geht nicht ?!
    // untere obj auswähleb, wp setzen = geht

    mfg j-i-b thx für Aufklärung
    ... pssst.... Inteligähnz schläft gerade !!!



    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Jack-is-back ()

  • Das liegt an dem Stepevent vom Wegpunkt. If object0.Ausgewaelt=false bezieht sich nur auf das erst erstellte object0.
    Ich frag mich sowieso, warum du das da gemacht hast, weil aus welchem Grund sollte der Wegpunkt deaktiviert werden, wenn das Fahrzeug nicht mehr ausgewählt ist?!
    Wie dem auch sei, falls du es so handhaben willst musst du das mit ner Schleife lösen, die jedes object0 durchläuft (brauchst dann die Funktion instance_find). Will dir jetzt nicht alles vorwegnehmen. An sonsten frag nochmal nach ;)
  • thx schonma=)
    das mit dem deaktivieren des wp sollte aber schon sein, wenn der wp nicht deaktiviert wird, gibts ein paar wie ich finde unschöne sachen.
    z.b ist der wp gesetzt und die einheiten bewegen sich dahin,dann stoppt man die bewegung indem man wegklickt, dann zieht man wieder ein rechteck um die einheiten und die bewegen sich zum letzden wp (als Beispiel).

    Ich dachte mit object0.Auswahl=false sind alle object0 gemeint?!- Kann man nicht machen das es sich auf alle object0 bezieht Oo?
    -> Man lernt immer wieder was neues ^^

    Zur schleife: ich versteh nicht ganz was du meinst sry^^. Also du willst alle object0's mit einer Schleife durchgehen und dann Oo?

    mfg j-i-s
    ... pssst.... Inteligähnz schläft gerade !!!



  • Mach den Code mal in das Stepevent:

    GML-Quellcode

    1. var i,obj;
    2. for(i=0;i<instance_number(object0);i+=1)
    3. {
    4. obj=instance_find(object0,i)
    5. if obj.Ausgewaelt=true exit
    6. }
    7. instance_deactivate_object(self)

    Er bewirkt, dass der Wegpunkt deaktiviert wird, wenn keine einzige Einheit markiert ist. Ich denke das wolltest du!?
  • hey vielen dank geht perfekt =)

    leider versteh ich nicht ganz wieso-
    also du gehst mit der schleife einfach alle exestierenden ids (obj) von dem object0 durch
    und fragst jedes obj ab, ob seine lokale var Ausgewaelt= true ist, wenn das stimmt verlässt du diesen
    schleifenabschnitt und das nächste obj kommt dran.Ich meine du änderst ja eig. damit garnichts, oder Oo

    Aber ich versteh nicht wieso^^-Es wird doch nur abgefragt ob die var=true ist?
    ich hätte eher gedacht des rätsels Lösung ist: das man mit einer shcleife alle obj ids durch geht
    und bei jeder die locale var auf =false stellt(würde doch auch gehn oder?)
    // und sry das mir im nachhinein doch was eingefallen ist was eventuell klappen würde , ich seh mal wieder den Wald anstatt die Bäume^^//

    Kannst du mir pls erklären wieso, deine Lösung funktioniert- ich währe dir sehr dankbar thx =)


    edit: hat sich alles geklärt wie gesagt Wald statt Bäume thx- ich glaub ich brauche echt langsam Ferien =)

    mfg j-i-b
    ... pssst.... Inteligähnz schläft gerade !!!



    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Jack-is-back ()

  • Benutzer online 1

    1 Besucher