Entfernung zum Objekt?

  • Entfernung zum Objekt?

    Ich mache momentan ein rundenbasiertes Strategiespiel. Ich habe allerdings folgendes Problem:



    Wenn ich eine Einheit anklicke. soll mittels Code dIe Entfernung zum nächsten Slot ermittelt werden. Code:

    GML-Quellcode

    1. if distance_to_object(obj_slot) = 10;

    Dann müssen die nächsten entfernten Slots rot gefärbt werden (sozusagen als Radius), aber wie geht das?

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

  • also radius wär kein problem und mit den slots würd ich entweder eifnach rumexperimentieren bis du die entfernung hast, oder du machst einfach jeden slot zum object und checkst dann die entfernung zu jedem slot (oder, falls du etwas transparente fläche um die slots lässt checkst du einfach die collision).

    ansonsten weiss ich nicht ganz genau was du willst... du könntest ja imo einfach auch immer abfragen ob der slot am rand ist und dann die slots drum herum einfärben, also zb so:

    Quellcode

    1. for(i=1, slotanzahl, 1){
    2. if(slot[i].x != 0){ // oder wo der rand bei dir halt ist
    3. //slot rechts (slot[i].x+50), untenrechts(slot[i].x+50 && slot[i].y+50) und slot links (slot[i].x-50)einfärben
    4. }
    5. elseif(slot[i].x != 600){
    6. //...
    7. }
    8. }


    nur ne idee, aber ansonsten kannst du, was sogar vllt noch besser ist auch einfach jeden slot in ein 2dimmensionales array einspeichern:

    Quellcode

    1. slot[x][y] = oject_create


    ich würde glaub ich die letzte variante nehmen und das ganze so einspeichern (mit ner for-loop am besten ^^) und dann einfach abfragen wo der spieler steht... damit weiss man dann ja eigtl schon welche markiert werden müssen und welche nicht, nämlich slot[x-1][y], slot[x+1][y], slot[x][y-1], slot[x][y+1] und je nach bedarf noch die diagonalen. dabei musst du dann halt nur auch wieder abfragen ob der slot am rand liegt, was allerdings noch viel leichter geht (zb. mit ner collisionabfrage ob der spieler auf slot[0][0] bis slot [10][0] steht etc)

    das abfragen wo der spieler steht lässt sich ja eigtl leicht durch ne collisionabfrage erledigen...

    ich hoffe ich konnte helfen, bzw wenigstens etwas zum denken anregen ^^.

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

  • Ist ja ziemlich viel ^^

    Aber so viel bracu ich nicht, ich wollte nur wissen, wie mein Code weitergehen soll. Also wenn die Entfernung zum nächsten Slot aus 10 ist, dann sollen alle Quadrate Rot werden (aber nur die, die in der Entfernung 10 sind!)

    Sollte eigentlich ganz einfach sein, ich wieß nur nicht den Code.
  • Original von Nobody-86
    bei einer if abstand = 10 abfrage komst du nie zu einem true wert, du solltest besser <=13 and >= 7 oder so abfragen.


    Ja danke für den Tipp. :happy:

    Aber wie kann ich jetzt machen, dass sich NUR die Blöcke färben, die im Abstand größer 13 sind und nicht alle?
  • In allen Blöcken if distance_to_object(objekt_slot) > 13 abfragen.
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • naja, dazu sollte man dann erstmal wissen wie die blöcke gespeichert sind... wenn uds mit arrays machst mit ner for und ... wenn jeder block nen eigenen namen hat musste alles per hand eingeben ^^...
  • Original von Extinct Sun
    Original von Kilik
    In allen Blöcken if distance_to_object(objekt_slot) > 13 abfragen.


    Dann kommt aber die Fehlermeldung "statement expected". ?(

    Du sollst natürlich auch noch den Code dahintersetzen, der ausgeführt werden soll, wenn das Statement true ergibt.

    Original aus der Help
    distance_to_object(obj) Gibt die Distanz der Instanz zur nächstgelegenen Instanz des angegebenen Objektes (obj) an.
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik

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

  • Original von Lord_Doominik
    naja, dazu sollte man dann erstmal wissen wie die blöcke gespeichert sind... wenn uds mit arrays machst mit ner for und ... wenn jeder block nen eigenen namen hat musste alles per hand eingeben ^^...


    Mit arrays kann ich leider nix anfangen.
    Aber ich bin kurz davor:
    Wieso kommt diese Fehlermeldung??
  • Original von Kilik
    Original von Extinct Sun
    Original von Kilik
    In allen Blöcken if distance_to_object(objekt_slot) > 13 abfragen.


    Dann kommt aber die Fehlermeldung "statement expected". ?(

    Du sollst natürlich auch noch den Code dahintersetzen, der ausgeführt werden soll, wenn das Statement true ergibt.

    Original aus der Help
    distance_to_object(obj) Gibt die Distanz der Instanz zur nächstgelegenen Instanz des angegebenen Objektes (obj) an.


    Ich weiß den Code nicht, also habe ich unter das Skript die Befehle per Drag&Drop eingesetzt. Ist das falsch? ?(

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

  • falscher syntax xD, so ists richtig:

    Quellcode

    1. if(distance_to_object(obj_slot) >7){
    2. blockrot = true
    3. sprite_index = spr_b4d
    4. }
    5. else{
    6. sprite_index = spr_b4
    7. }


    so müsste es eigtl funktionieren... achte demnächst darauf, dass du den syntax einhältst. wenn du nicht weisst wo du ein semikolon machen musst und wo nicht, lass am besten erstmal alle weg... und für die 2. if-abfrage habe ich der einfachkeit halber einfach mal else eingesetzt, was eiglt genau das gleiche bewirkt, nur das es auch schneller geht. nun fragt er einfach ab ob die distanz zu dem obj > als 7 ist und falls das nicht der fall ist springt er einfach in das else-case.

    else = ansonsten


    EDIT:
    achso, falls dus wissen willst ist der error aufgetreten weil du die klammern bei dem if vergessen hast, allerdings hätte es auch noch lauter folgefehler gegeben, da du zb. das semikolon falsch gesetzt hast, etc etc... ^^

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