schuss soll mittig zum feind

  • schuss soll mittig zum feind

    Hallo,

    ich habe folgende objekte:

    feind und schuss

    in feind habe ich :

    create-event:

    set alarm 0 to 100

    alarm-event:

    create instance of object schuss: x:feind.x+10,y:feind.y+40
    set alarm 0 to 100

    Okay somit schiesst gibt der feind alle 100 steps einen schuss ab, aber er schiesst durch die eingabe der feind-koordinaten nicht geradeaus sondern schräg. Und wenn ich nur x:0 und y:0 relative zum feind setze,
    dann fängt der schuss irgendwo hinter seinem rücken an...

    in schuss habe ich halt nur definiert:

    move towards to a point
    x:0 y:player.y relative.


    1. Wie kann ich es machen das der Feind den Schuss in Höhe der Hüfte ausführt und das nur in horizontaler richtung?
    2. Wie kann ich es coden, das der Feind auch in die Richtung schaut, wo der Spieler gerade ist. Momentan geht zwar der Schuss in die Richtung des Spielers, aber der Feind steht auch manchmal mit dem Rücken zum Spieler.
    Was man mit Händen baut, kann auch mit Händen zerstört werden...
  • Original von - Kev -
    Zum Thema "Gegner soll zum Helden schauen. Stellst du dir das so vor?:

    GML-Quellcode

    1. if x < obj_held.x
    2. sprite_index = spr_gegner2
    3. if x > obj_held.x
    4. sprite_index = spr_gegner1


    Genauso meine ich das.... danke -KEV-

    Vielleicht kann mir jemand meine erste Frage noch beantworten.
    Was man mit Händen baut, kann auch mit Händen zerstört werden...
  • im alarm event musst du das erst mal so stellen:
    create instance of object schuss: x: x+10,y: y+40

    Und dann mit den dazuaddierten Werten rumexperimentieren bis die Kugel an der Hüfte ist.
    Das mit der horizontalen ist einfach. Beim schuss muss im create event folgendes rein:

    move towards to a point
    x:player.x y:0 relative.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • Danke Windapple. So hatte ich das schon mal.... vielleicht habe ich da sogar übesehen, das es evtl. funktionierte.

    Habe aber noch ein Problem, wegen der Bewegung des Feindes.

    Im Step-Event des Feindes:

    GML-Quellcode

    1. {
    2. if x < player.x
    3. {sprite_index = feind_rechts;
    4. feind.hspeed=2
    5. if place_meeting(feind.x,feind.y,wand2)
    6. {sprite_index = feind_links;
    7. feind.hspeed=-2;}
    8. };
    9. if x > player.x
    10. {sprite_index = feind_links;
    11. feind.hspeed=-2;
    12. if place_meeting(feind.x,feind.y,wand)
    13. {sprite_index = feind_rechts;
    14. feind.hspeed=2;}
    15. }
    16. }
    Alles anzeigen


    Wand ist das solide Objekt, um den Feind in die andere Richtung zu steuern. Wand2 ist kein Fehler, sondern nur eine andere Grafik...

    Mit obigen Code bleibt er aber leider in der Wand hängen. Erst wenn ich mit der Player Figur wieder ein wenig vom Feind weg gehe, dann latscht der Feind wieder los.

    Folgendes habe ich noch für den feind eingestellt:

    Create-Event:

    Start moving in direction right, speed 2

    Kollision-Event mit Wand:

    Change sprite into feind_rechts
    Start moving in direction right, speed 2

    Kollision-Event mit Wand2:

    Change sprite into feind_links
    Start moving in direction left, speed 2

    Kann es sein das es irgendwie ein Konflikt zwischen dem obigen GML-Code und den hier angegeben Codes gibt?
    Was man mit Händen baut, kann auch mit Händen zerstört werden...

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

  • Ja, du musst dann den Kollisionscode auf dem Step event entfernen.
    Wahrscheinlich bleibt der dann aber auch stehen, weil du ja z.B. links bist, aber links für den Feind ne Wand ist. Bei der Kollision geht er dann nach rechts, aber per Step Event wird er wieder nach links bewegt.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • Na ich habe eine bessere Lösung gefunden, allerdings weiß ich nicht wie man zwei if-anweisungen koppelt..

    GML-Quellcode

    1. {
    2. if x < player.x && y = player.y
    3. {sprite_index = feind_rechts;
    4. feind.hspeed=2;}
    5. if x > player.x && y = player.y
    6. {sprite_index = feind_links;
    7. feind.hspeed=-2;}
    8. }
    Alles anzeigen


    Ich weiß nicht ob das && beide Anweisungen abarbeitet.

    Es kommt kein Fehler beim Spielstart, aber es funktioniert auch nicht.
    Jetzt läuft der Feind unbeeindruckt vom Code am Spieler vorbei...
    Was man mit Händen baut, kann auch mit Händen zerstört werden...
  • Da gibts noch ein Problem mit dem Schuss:

    GML-Quellcode

    1. {
    2. if feind.x < player.x
    3. {shoot_feind.hspeed=3;
    4. if sprite_index=feind_rechts
    5. sprite_index=feind_links;}
    6. if feind.x > player.x
    7. {shoot_feind.hspeed=-3;
    8. if sprite_index=feind_links
    9. sprite_index=feind_rechts;}
    10. }
    Alles anzeigen


    Klappt ja auch ganz gut. Der Schuss geht somit immer in die Richtung wo sich der Spieler gerade befindet. Aber wie kann ich bei Auslösen des Schusses definieren, das auch der Feind in die Schussrichtung schaut?



    EDIT: es ist doch &&.

    Bloß nach Anzeige von feind.y und player.y gab es einen unterschied

    feind.y hatte y=256 und player.y = 248.5 auf gleicher höhe.
    naja problem gelöst, indem ich einfach

    && player.y = 248.5 gemacht habe. Naja und für die anderen Feinde die noch weiter über 248.5 stehen muß ich halt einen weiteren Code in gleicher Form machen.


    Original von Defmaster
    statt && AND nehmen dann dürfte es klappen ;)


    Und ich Deppl dachte && steht für AND....

    Aber AND nimmt er nicht, Fehlermeldung!
    Was man mit Händen baut, kann auch mit Händen zerstört werden...

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von magic_hero ()