Gegner richtet sich nicht nach Bounding Box?

  • GM 7
  • Gegner richtet sich nicht nach Bounding Box?

    Hey, ich habe ein Problem.
    Ich hab in meinem Spiel zwei Gegner gemacht.
    Der eine funktioniert perfekt, der andere bleibt immer bei einer Kollision mit obj_reverser stecken. obj_reverser lässt die Gegner in die andere Richtung laufen. Ich hab dem Gegner ne eigenen Bounding Box verliehen, aber es funzt immer noch nicht. Dann hab ich ihm EXAKT DIE SELBE Bounding Box wie dem funktionierenden Gegner gegeben, aber er steckt immer noch fest. Die beiden Gegner haben exakt die selben Codes, also sollte es doch eigentlich funktionieren?
    PLZ HELP ;)
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Funktioniert es, wenn der Gegner denselben Sprite hat wie der funktionierende?
    Mein Tipp wäre, "Precise Collision Checking" auszuschalten, denn sonst richtet sich die Kollision nicht nach der Bounding Box, sondern nach der Form des Sprites, was, insbesondere bei animierten Sprites, Probleme machen kann. Alternativ kannst du auch eine Mask verwenden (also, dass die Kollisionseigenschaften eines Sprites verwendet werden, der gar nicht derjenige ist, der gezeigt wird)
  • Also, ne Mask hab ich schon versucht, funzt net. Precise Collision Checking is allerdings an und ich würde es gerne auch an behalten, alle sprites im ganzen spiel haben precise collision checking an. gehts net, dass precise collision checking nur für die kollision mit obj_reverser aus is? :(
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Hau ins Draw Event mal

    GML-Quellcode

    1. draw_set_color(c_lime);
    2. draw_rectangle(bbox_left,bbox_top,bbox_right,bbox_bottom);

    Vermutlich benutzt du image_xscale für das Drehen des Sprites, dadurch verschiebt sich die Bounding Box um einen Pixel und die Figur bleibt im Umkehrer hängen.
    Mit dem obigen Code solltest du das testen können.

    Um dieses Problem zu umgehen, benutze eine Mask und anstatt image_xscale eine Variable wie z.b. face die du auf 1 oder -1 setzt. Ins Draw Event schreibst du dann:

    GML-Quellcode

    1. draw_sprite_ext(sprite_index,image_index,x-sprite_get_xoffset(sprite_index),y-sprite_get_yoffset(sprite_index),image_xscale*face,image_yscale,image_angle,image_blend,image_alpha);

    Ich habe das aus dem Kopf jetzt hoffentlich alles richtig aufgeschrieben... die beiden Funktionen für den Origin willste vermutlich nicht in jedem Draw-Event aufrufen, aber solange du noch entwickelst lass es lieber so.

    Und zu guter Letzt:
    Precise Collision checking machst du immer aus, wenn du Kollisionen von Rechtecken willst. Da das fast immer der Fall ist, kannst du es auch entsprechend fast immer ausschalten.
    Schalter es nur an, wenn du eine Kollision nach dem Sprite haben willst (der dafür nach meinem Verständnis auch Transparenz haben muss, sonst ist er ja wieder ein Rechteck).


    Wenn du aber noch eine schönere Lösung haben willst, sag Bescheid. Die ist dann aber etwas komplizierter.
  • Danke für deine Antwort, aber ich habe es bereits selbst gelöst -> ich habs mit if collision_rectangle gelöst. Übrigens benutze ich nie image_xscale.
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.