Schütze verursacht eine Fehlermeldung

  • GM 8

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

  • Schütze verursacht eine Fehlermeldung

    Folgendes Problem:

    Ich habe einen Schützen der nur dann schiessen soll wenn sich der Spielcharakter in der Nähe befindet. Nun hatte man hier (auch in diesem Forum) den Tipp gegeben unter der Variabelenabfrage "Test Variable" den Befehl einzufügen "point_distance(x,y,Ria.x,Ria.y)" (Ria is in dem Fall der Hauptcharakter). Des funktioniert auch soweit, nur ab und an kommt in völlig unregelmäßigen Abständen die Fehlermeldung

    ERROR in
    action number 2
    of Alarm Event for alarm 0
    for object Schuetze_Rechts:

    Error in expression:point_distance(x,y,Ria.x,Ria.y)
    position 24: Unknown variable x

    X ist in dem Fall ja die horizontale Richtung, aber was ist da denn genau falsch? Muss ich die Variabele noch unter "Create" irgendwie genauer definieren?
  • hmm, du könntest entweder einfach nur den Sprite der Ria-Instanz ändern anstelle die ganze Instanz zu ersetzen. Das geht mit der Variablen sprite_index.
    Oder du erstellst eine globale variable: global.player und immer wenn du die Player instanz irgendwo austauscht setztst du dessen ID einfach auf global.player. Dies geht am besten im create-event der Objekte.
    Beim point_distance Befehl kommt dann

    GML-Quellcode

    1. point_distance(x,y,global.player.x,global.player.y)

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Puh... Nun ja, das klingt alles nicht unkompliziert, was währe denn die einfachere von denen Varianten? Also mein Hauptcharakter existiert derzeit 5 mal und das alles muss ich nun unter einem Hut bekommen sozusagen, das habe ich schon mal verstanden mit meinem bescheidenem Gamemaker Wissen.

    Dies erreiche ich indem ich eine dem Hauptcharakter eine Variabele zuweise die dann über dem point distance Befehl abgefragt wird, ist das so korrekt? Spielt das eine Rolle wo ich die nun mit dem Create-event einbaue (oder gar in alle 5)? Ansonsten ist das ja nur eine ganz normale Variable mit dem Namen global.player die über Set Variabele eingefügt wird, nur mit der ID da konnte ich dir nun nicht so recht folgen und mit dem sprite_index da weiß ich nun auch nicht so recht etwas anzufangen mit...
  • Oh... :/
    Naja da du schon dieses System mit den 5 Objekten hast, ists wohl besser wenn du die zweite Variante nimmst. Übrigens wärs nutzlich gewesen wenn dein Profil anzeigen würde dass du drag and drop benuztst...

    Du musst in jedem der creat-events deiner 5 spieler-objekte die Variable "global.player" auf die variable namens "id" setzen. Dazu musst du wissen dass es im Game Maker solche id-nummern gibt. Wenn du imemr nur eine instanz von einem Objekt-typ (objekt-typ wäre ind einem fall "Ria", also das was du im Ordner namens "objects" siehst) verwendest, dann kannst du diese Instanz direct mit "Ria.variablexy" ansprechen, wie du es ja bereits getan hast.
    Wenn du aber nun zwei solcer Instanzen im Raum hättest, könntest du auf diese Weise nicht mehr unterscheiden. Darum hat jede Instanz eine eingebaute Variable namens "id" die eine große Zahl enthält die einzigartig ist. Mit Hilfe dieser Zahl kannst du genau diese Instanz ansprechen.

    Also wenn du in der Variable global.player die id deiner Spieler-instanz hast, kannst du diese immer auf diese Weise ansprechen:

    GML-Quellcode

    1. global.player.variablexy


    Diese Variable muss aber in deinem Fall in jedem create event neu gesezt werden damit sie immer die id des aktuellen Spieler-objektes enthält.

    Hoffe das war einigermaßen verständlich ^^

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • @Famous. Glaube nicht dass das klappt denn soweit ich verstanden habe, benutzt er 5 vershciedene Objekte (nicht Instanzen) für die Stellungen seines Characters...
    Er müsste für deine Lösung mit Parents arbeiten... zu umständlich...

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Das Problem war folgendes: Ich habe eine Magierin mit einem Zauberstab, damit sollte sie zuschlagen können und dabei natürlich der entsprechende Gegner und nicht die Hauptfigur selbst dabei drauf gehen, also habe ich ein neues Objekt gemacht zu dem beim schlagen gewechselt wird. Ja, aber warum habe das nicht einfach das Sprite gewechselt das ist mir nun auch nicht so ganz klar... Aus irgendwelchen Gründen ging das nicht und bereitete Probleme und so erschien es mir zumindest zu dem Zeitpunkt einfacher... denke ich...

    Die anderen beiden Objekte der Hauptfigur sind für das ducken des Charakters, da der Charakter eine Kollitionsmaske hat und die musste für das ducken kleiner sein, sonst macht das ducken ja keinen Sinn. Die kann man zwar auch bei den Sprites festlegen, aber das bereitete Probleme, der Charakter blieb hängen an den Blöcken usw, darum habe ich nun 5 verschiedene Objekte. Bis jetzt hat das ja auch irgendwie funktioniert darum kam es mir nie in den Sinn es zu ändern.

    Ich könnte diesen Befehl bei den Bogenschützen freilich auch einfach weglassen, nur dann schießen sie kreuz und quer über das gesammte Level und gerade das wollte ich vermeiden. Wenn ich das Leveldesign allerdings so anlege das immer eine Mauer vor ihnen ist, dann würde das auch gehen - theoretisch, vielleicht denke ich so manches mal zu kompliziert.

    Freilich sind das unterirdische Lösungen, aber ich bin ja auch ein unterirdischer Anfänger und versuche die Dinge so zu lösen wo ich denke es ist einigermaßen logisch, aber das ist nicht immer der beste Weg das mag sein. So manches mal steigert man sich in so eine Sache rein und dann kommen immer neue Dinge hinzu die man im nachhinein vielleicht besser weg gelassen hätte aber dafür währe es nun schade um die Sprites...

    Das hat im übrigen bis jetzt noch nicht funktioniert. Nun kommt die gleiche Fehlermedung allerdings mit der global.player Variable, irgendwas ist noch falsch...

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

  • Amaunir schrieb:


    Das hat im übrigen bis jetzt noch nicht funktioniert. Nun kommt die gleiche Fehlermedung allerdings mit der global.player Variable, irgendwas ist noch falsch...

    Befinden sich denn bogenschützen zu irgendeinem Zeitpunkt im Raum ohne dass gleichzeitig ein ein Spieler Objekt im Raum ist? Nur dann kann dies passieren...
    Wie wechselst du denn die Objekte eigentlich?

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Amaunir schrieb:

    Ich werde das verwerfen, das bekomme ich einfach nicht hin. Ich setzte die Schützen in der Nähe einer Wand das ist die einfachste Lösung, dennoch danke für die Hilfe.

    Gib doch nicht so einfach auf...
    Verwende notfalls famous' Vorschlag und nimm den Block zum Abfragen von variablen ( :action_if: ) und schreib hinein: "instance_exists(global.player)" vor jedem Block wo irgendwie die global.player variable angesprochen wird. Das funktioniert definitiv.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Kein Problem, lol. Das ist allerdings eine eher unsaubere lösung...
    Aber imemrnoch 100 mal besser als das was ich vor ~4 jahren in meinem allerersten "Spiel" gemacht habe um eine Gif-Character-Animation zu verlangsamen: Die Framerate des gesamten Spiels auf 8 fps runtergedreht ._.

    Auf jedenfall viel Glück mit dem Projekt! :)

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)