Wie erkennt ein Spieler in welche Richtung der andere steht?

  • GM 8

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

  • Wie erkennt ein Spieler in welche Richtung der andere steht?

    Hallo leute. Nach langem vergeblichem suchen ist es mir leider nicht gelungen das Problem zu lösen..
    Ich hab jedoch einen Thread für dieses Problem gesehen... Naja nur find ichs halt nicht X(

    Also ich arbeite gerad an einem Spiel (Namenloser Krieg ) und wenn ich nun angenommen 3 Speerträger rekrutiere, und diese dann auf einen Gegner treffen, sollen diese nicht ineinander laufen. Wenn jedoch der vordere Spieler läuft und hinter ihm auch ein Speerträger steht, will er nicht mehr laufen. Hoffe es ist verständlich wie ich es schreibe..^^

    GML-Quellcode

    1. if distance_to_object(obj_speertrager) < 30
    2. speed = 0


    Was muss ich hier wo einfügen?

    Dann gibt es noch ein zweites Problem. Ich werde das folgende ins Spiel einbauen, solange es nicht allzuschwer ist^^:
    Einer der (aus dem Beispiel) 2 hinteren Speerträger (sprich der am nahestehndste) soll dem vorderen helfen, sprich in einem laufen. UND nach dem der Gegner besiegt wurde, soll dieser warten, bis der andere mind. 30 "Felder" (wegen dem Code oberhalb die 30 "Felder"^^) vom eigenen entfernt ist.

    Wie behebe ich diese Probleme?
    Einen ähnlichen Thread hab ich gesehen, in dem ist es darum gegangen, dass der Gegner ermitteln soll aus welcher Richtung der Spieler schießt.. Aber wie gesagt, den finde ich leider nicht mehr :S

    Vielen danke schonmal =)
    mfg Salmi
  • Brauchst eigendlich nur ne Funktion die Fragt ob ewin Object vor dem 2. Speerträger ist, dessen *id zurück gibt. Diesen *id frgast du dann nur noch ob id.speed > 0.

    GML-Quellcode

    1. if (instance_position(x+10,y,obj_speertraeger)) {
    2. id = instance_position(x+10,y,obj_speertraeger);
    3. if (id.speed > 0) {
    4. speed =15; // laufen halt
    5. }
    6. }

    oder so

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von lucki90 ()

  • dein problem liegt dabei, dass es wohl nich nur ein einziges obj_speertrager gibt. du solltest eine schleife benützen, die jedes objekt vom typ obj_speertrager prüft.
    pseudo code:

    GML-Quellcode

    1. for (i = 0; i < instance_count(obj_speerträger); i++
    2. {
    3. do_something();
    4. }
  • hm... ich glaube das eher weniger das ich das mit dem code lösen muss... (naja was weiß ich schon :D)

    Der Speerträger (Es können unbegrenzt Speerträger gebaut werden solange das Geld reicht^^) Soll nur dann nicht nach rechts gehen, sollte dort ebenfalls ein Speerträger näher als 30 Felder entfernt sein. Das kann man ja regeln mit x koardinaten oder? (Wenn ja, ich weiß den Code nicht >.<) Und es sind ja nicht nur Speerträger... Es gibt 3 verschiedene Einheiten noch dazu...
    mfg Salmi
  • Hat mal nen ähnliches Problem in nem Projekt. Habs gelöst wie oben beschrieben. Hab mit der ID des Objektes gearbeitet. Hier, Auszug aus der Hilfe was die ID ist.

    Quellcode

    1. id* The unique identifier for the instance (>= 100000). (Note that when defining rooms the id of the instance under the mouse is always indicated.)

    Du kannst mit der ID genau das Objekt vor der Einheit ansprechen. Hatte in meinem Projekt auch verschiedene "Einheiten", die aber alle in einem Objekt waren mit mit einer Variable (var_type) unterschieden wurden.
    Code sah wie folgt aus (hab ich angepasst für dich):

    GML-Quellcode

    1. find = instance_place(x+32,y,obj_einheit);
    2. if (find) {
    3. if (find.speed == 0) {
    4. speed = 0;
    5. } else {
    6. speed = 15;
    7. //wann er genau starten soll kannst du ja selber einfügen... jetzt würde er sofort los laufen nachdem der andere wieder läuft.
    8. }
    9. } else {
    10. speed = 15;
    11. //fals die figur stirb... muss er ja auch weiterlaufen^^
    12. }
    Alles anzeigen


    EDIT1: Oder, ich hab einfach nicht verstanden was du möchtest.