collision_line erklärung bitte

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

  • collision_line erklärung bitte

    hy wie der titel schon sagt brauche ich hilfe bei collision line....kann mir bitte jemand die x1,x2,y1,y2 koordinaten erklären.....wie mach ich es das die collision line 40 pixel lang ist und in eine bestimmte richtung sieht....
    also wenn zb der enemy nach links schaut auch die line links ist.


    ich habe ein kleinen code geschrieben damit der enemy ein sichtfeld hat.


    eins noch wie mach ich es das sich etwas also eine instanz über dem enemy mitbewegt???

    danke
  • Hi,
    x1 und y1 sind deine Startkoordinaten z.B. x1 = 100, y1 = 100
    x2 und y2 sind deine Endkoordinaten z.B. x2 = 200, y2 = 100

    Somit würde dein enemy (Startkoordinate) nach rechts schauen bzw. die collision linie 100 pixel nach rechts abfragen.

    Ein Bsp.:

    GML-Quellcode

    1. collision_line(enemy.x, enemy.y, enemy.x + lengthdir_x(40, direction), enemy.y + lengthdir_y(40, direction), obj_player, true, true) //die direction kannst du bestimmt selbst berechnen, vllt. sogar mit image_angle.

    Entweder das funktioniert so oder das mit lengthdir_x und lengthdir_y ist falsch, bin mir da grad nicht sicher, habe diese funktion schon lange nicht mehr genutzt. :D
    Ansonsten musst du die zweiten x und y koordinaten mit point_distance und point_direction berechnen lassen. :)
    Für jene, die ständig das Scheitern fürchten, sind Erfolge auf ewig unerreichbar.

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

  • also wenn ich zb

    GML-Quellcode

    1. ​collision_line(0,0,50,0)


    mache dann geht die linie komischerweise vom enemi (wo ich den code im step event habe) rauf bis an die x koordinate vom raum.
    hab im draw event ne draw_line erstellt mit dem selben um zusehen wo die linie ist.
  • ->Rauf<- ehrlich jetzt, die x koordinaten können nur links und rechts sein. y koordinaten sind nur oben (Rauf) und unten.

    Aber collision_line hat doch 7 argumente... warum nutzt du nur 4? :(
    Außerdem bringt dem enemi das nichts wenn du ihm die Starkoordinaten von 0,0 gibst und die Endkoordinaten 50, 0, dass wäre einfach nur ein gerader Strich von links nach recht im koordinaten System.

    Wie wärs mit einer Pause. ^^
    Für jene, die ständig das Scheitern fürchten, sind Erfolge auf ewig unerreichbar.
  • acidrain833 schrieb:

    hy wie der titel schon sagt brauche ich hilfe bei collision line....kann mir bitte jemand die x1,x2,y1,y2 koordinaten erklären.....wie mach ich es das die collision line 40 pixel lang ist und in eine bestimmte richtung sieht....
    also wenn zb der enemy nach links schaut auch die line links ist.

    ich habe ein kleinen code geschrieben damit der enemy ein sichtfeld hat.

    eins noch wie mach ich es das sich etwas also eine instanz über dem enemy mitbewegt???

    danke

    Also das mit der Drehung erscheint mir etwas kompliziert, da man berechnen müsste, bei welcher Gradzahl die das enemy hat, welchen
    Koordinaten dies entsprechen würde.
    Bewegt sich das enemy denn in 360° oder in 4/8 Richtungen?
    Wenn es sich zum Beispiel in 360° drehen lässt, würde ich ein Objekt erstellen (ohne Sprite), welches die Rotation von enemy annimmt.
    Ich weiß ja nicht auf welche Art du dein enemy bewegst (beziehungsweise dessen Sprite rotierst), wenn du zum Beispiel auf Tastatureingabe die Image_angle setzt,
    würde ich bei dem Objekt (nennen wir es mal "obj_RichtungController") simpel denselben Image_angle-Wert wie bei enemy verwenden.

    GML-Quellcode

    1. //Im Step-Event von obj_RichtungController
    2. Image_angle = enemy.image_angle;

    Die Linie könntest du dann im Draw-Event malen.

    GML-Quellcode

    1. collision_line( beliebigerXwert, beliebigerYwert, ?, ?, beliebigesObjektZumÜberprüfenVonKollisionen, true/false, true/false );


    Les dir auch hier nochmal die Syntax durch:
    goo.gl/ox6iMr

    Bei den Werten für x2 und y2 habe ich mal zwei Fragezeichen gemacht, da ich wie gesagt nicht weiß wie man Koordniaten anhand eines
    Winkels berechnet, doch ich wette da findet Google eine Lösung.
    Ich könnte mir vorstellen, dass man das irgendwie mithilfe des Steigungsdreiecks einer linearen Funktion berechnen kann, aber vielleicht
    red ich auch nur Schmarrn ;)

    Am einfachsten wäre es, wenn du ein Sprite erstellst (Das so aussieht wie eine Line) und im Sprite-Editor den Y-Origin-Wert - also jenachdem wie du die Linie zeichnest
    (ich denke jetzt an eine horizontale Linie) - auf die Hälfte der Höhe setzt, damit es so aussieht als sei die Linie an einem Ende festgemacht und sich um einen Punkt dreht.
    Dann könntest du einfach wieder wie oben beschrieben die image_angle von enemy übernehmen.

    Wenn sich enemy in 4 verschiedene Richtungen drehen kann, kannst du die Koordinaten von x2 und y2 der Linie ja simpel errechnen, wenn du weißt, in welche Richtung enemy guckt,
    was du über eine Variable überprüfen kannst (nennen wir sie "richtung")

    GML-Quellcode

    1. //im Create-Event (von enemy, ansonsten global.richtung)
    2. var richtung = "links";
    3. var ankerpunktStart_x = /*beliebiger x-Startpunkt*/;
    4. var ankerpunktStart_y = /*beliebiger y-Startpunkt*/;
    5. //Im Draw-Event
    6. switch(enemy.richtung)
    7. {
    8. case "links":
    9. draw_line(ankerpunktStart_x, ankerpunktStart_y, ankerpunktStart_x - 40, ankerpunktStart_y);
    10. break;
    11. case "rechts":
    12. draw_line(ankerpunktStart_x, ankerpunktStart_y, ankerpunktStart_x + 40, ankerpunktStart_y);
    13. break;
    14. case "oben":
    15. draw_line(ankerpunktStart_x, ankerpunktStart_y, ankerpunktStart_x, ankerpunktStart_y - 40);
    16. break;
    17. case "unten":
    18. draw_line(ankerpunktStart_x, ankerpunktStart_y, ankerpunktStart_x, ankerpunktStart_y + 40);
    19. }
    Alles anzeigen


    Vielleicht hilft's was :)

    Und zu deiner zweiten Frage
    eins noch wie mach ich es das sich etwas also eine instanz über dem enemy mitbewegt???


    ganz simpel:

    GML-Quellcode

    1. //Im Step-Event der Instanz
    2. x = enemy.x;
    3. y = enemy.y - /*beliebige Höhe*/;
  • Das mit dem Steigerungsdreieck ist nicht falsch. Aber dies selbst zu berechnen würde zu viel Arbeit machen. Dafür gibt es ja "lengthdir_x" und "lengthdir_y", diese beiden funktionen ersparen dir das. ^^
    In meinen obigen Code fehlt theoretisch nur noch die direction und die kann man unter anderem so heraus bekommen:

    GML-Quellcode

    1. image_angle = direction;
    oder wenn es nur 4-8 richtungen gibt, dann je mit einer Gradzahl: 0°, 45°, 90°, ... die man als Variable speichert und abfragt... Zumindest würde ich das so lösen. ^^
    Für jene, die ständig das Scheitern fürchten, sind Erfolge auf ewig unerreichbar.
  • Danke für eure antworten


    aso ich weiß das es normalerweise mehrere argumente benötigt aber ich wollte halt nur die koordinaten schreiben....


    ich mach nen platformer 2d und will das der enemy einen strich nach rechts hat wenn er nach rechts schaut ansonsten nach links.

    ich will nur einen geraden strich ......


    mein game maker spinnt ab und zu werd das alles nochmal machen thx für eure antworten