BlickWinkel

  • Hallo leute ich habe eine figur (Wächter) die soll einen blickwinkel haben und wenn jemand darin reinläuft wird er entdeckt und es wird ne nachricht also show_message geschrieben man soll den winkel wo er hinguckt sehen können kann mir da jemand nen unkomplexes und einfaches example machen ?
  • hier ein einfaches beispiel:
    Dateien
    • FieldOfView.zip

      (3,27 kB, 194 mal heruntergeladen, zuletzt: )
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x

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

  • Hier n kleines Example, dass ich grad in paar mins gemacht habe!
    Mir ist grad aufgefallen, dass dies schelcht ist, falls du viele gegner, da man für jeden gegner ein extra kegelobject braucht, aber man kann dies sicher noch weit ausbauen!

    EDIT: Wieso ist mein Inet so langsam?!? ;(
    Dateien
    • sichtkegel.rar

      (2,73 kB, 166 mal heruntergeladen, zuletzt: )

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

  • Jawoll du bist der beste :) genau das habe ich gesucht funktioniert bestens danke dir!

    EDIT

    Danke euch beiden!! da win zuerst gepostet hat habe ich seins eingebaut aber beide funktionieren danke euch

    EDIT

    WIN wie kann ich die blickweite der gegner erhöhen??

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

  • einfach im create-event des gegners die varibale "view" erhöhen.
    aber das wirkt sich gleichzeitiug auf den blick radius aus!
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x

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

  • moin moin

    das thema ist zwar schon was älter aber besser als ein neues auf machen oder?^^

    ich hab ein problem:

    ich habe folgende abfrage:

    Quellcode

    1. if not collision_line(self.x,self.y,obj_character.x,obj_character.y,obj_wall,true,true)
    2. {
    3. }



    leider führt der das was zwischen den klammern steht auch aus, wenn zwischen dem obj_character und dem obj_gegner (self) das obj_wall deffinitiv vorhanden ist.....

    ich hoffe es ist ein blöder fehler^^ denn dann ist er wenigstens einfach zu beheben^^
    Philosophie bedeutet, in einem stockdunklem raum nach einer pechschwarzen katze zu suchen, die gar nicht existiert ;) :D
    ------------------------------------
    Mein Projekt: >>>>>>>>>>>>>>>>>>>> DER EINSAME SCHLORK <<<<<<<<<<<<<<<<<<
  • GML-Quellcode

    1. if collision_line(self.x,self.y,obj_character.x,obj_character.y,obj_wall,true,true)=false
    2. {
    3. if(self.y <= obj_character.y+16) && (self.y >= obj_character.y-16)
    4. {
    5. if(self.x-32 > obj_character.x) && (image == 1) //image gibt in welche richtung der gegner guckt
    6. {
    7. if (distance_to_object(obj_character) < 300)
    8. {
    9. if(aufladen == 0) //während die waffe aufgeladen werden muss wird das gleich 1
    10. {
    11. instance_create(self.x-24,self.y,obj_laser_gegner);
    12. aufladen = 1; // waffe muss jetzt aufladen
    13. alarm[0] = 30; // aufladen wird wieder = 0 gesetzt
    14. }
    15. }
    16. }
    17. else
    18. {
    19. if(self.y <= obj_character.y+16) && (self.y >= obj_character.y-16)
    20. {
    21. if(self.x+32 < obj_character.x) && (image == 0)
    22. {
    23. if distance_to_object(obj_character) < 200 and distance_to_object(obj_character) > 32
    24. {
    25. if(aufladen == 0)
    26. {
    27. instance_create(self.x+10,self.y,obj_laser_gegner);
    28. aufladen = 1;
    29. alarm[0] = 30;
    30. }
    31. }
    32. }
    33. }
    34. }
    35. }
    36. }
    Alles anzeigen



    das ist der ganze code der im step event ist, wenn ich das collision line weglasse funktioniert er wunderbar und ohne fehler, die gegner schießen nur wenn sie mich anschauen leider auch durch wände.........

    wenn ich das collision dahinmache schießen sie gar nicht mehr dabei collidiert die linie ganz sicher nicht wenn ich die drawen lasse sieht man das ja..... wenn das jetzt niemand lösen kann dann stell ich das spiel mal hier rein soweit wie es fertig ist leider noch nicht viel deshalb kann ich auch nich so einfach das on stellen das müsst ich dann dafür extra noch ein wenig bearbeiten^^ aber wenns sein muss....
    Philosophie bedeutet, in einem stockdunklem raum nach einer pechschwarzen katze zu suchen, die gar nicht existiert ;) :D
    ------------------------------------
    Mein Projekt: >>>>>>>>>>>>>>>>>>>> DER EINSAME SCHLORK <<<<<<<<<<<<<<<<<<

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

  • Ah, ich hab einen Fehler beim Rückgabewert gemacht. Die Funktion gibt nicht true und false zurück, sondern die ID oder einen negativen Wert.
    Das müsste funktionieren:

    GML-Quellcode

    1. if sign(collision_line(x,y,object0.x,object0.y,object1,true,true))=-1
    2. {
    3. }
    "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

  • so letzter edit dieses riesen beitrages:

    der bug ist behoben ich habe ein neues objekt das die sicht begrenzt das ist invisible und liegt über der wand es ist 64 pixel hoch und 16 pixel breit. da der gegner das ja eh nur machen soll wenn der player im bereich des objektes (y+ und - 16) ist.....

    ansonsten hätte ich ein objekt in U-form machen müssen... :( X(

    der bug ist reproduzierbar. bei meinem sichtbereich anhang könnt ihr die wand ja einfach mal durch ein sprite ersetzen, das 16 mal 16 groß ist und abfragen ob und folgenden code in den enemy step schreiben

    GML-Quellcode

    1. if not collision_line(self.x,self.y,obj_player.x,obj_player.y,obj_wand,true,true)
    2. {
    3. if(self.y +16 > obj_player.y)&& (self.y -16< obj_player.y)
    4. {
    5. obj_player.sprite_index = spr_wand;
    6. }
    7. }









    eventuell ist das problem gelöst. meine tests ergeben, dass wenn ich zwei 16*16 objekte übereinander stapele, dass dann eine lücke dazwischen ist von genau einem pixel und das dadurch scheinbar die linie hindurchkommt weil wenn ich ein höheres objekt nehme anstatt 16*16 ,16*100 dann läuft alles so wie es soll...................

    weiß jemand dafür ne lösung? sons verzweifle ich^^





    Sooooooooooo....

    daran lag es nicht.... ich habe sogar ein eigenes example für mich gemacht (sichtbereich.rar) und da funzt alles einwandfrei....

    ich hab jetzt mal die gml angehängt. steuern tut man mit pfeil hoch pfeil links pfeil rechts, wenn man ncihts drückt fällt der player(das grüne fiech)

    wand sollte nicht berührt werden^^ die blauen gegner sollten nicht berührt werden.... also wenn ihr das spiel startet im menü auf start drücken im nächsten room an die steuerung gewöhnen^^ bzw nach unten rechts ins rohr schweben dann seid ihr in dem problemroom^^

    es geht um das step event vom obj_gegner.... es soll nur ausgeführt werden, wenn keine wand zwischen dem obj_character und dem obj_gegner ist.... der code im step event funzt so einwandfrei nur er sieht mich auch durch mauern^^

    wär nett wenn ihr euch das mal anschauen würdet^^


    ÄÄÄÄÄÄÄÄÄÄÄÄÄDDDDDDDDDIIIIIIIIIIIIIIIIIITTTTTTTTTTT:

    also ich hab jetzt noch ein wenig weiter probiert und mir fällt auf das sich shcon was ändert wenn man da die collisionsabfrage reinsetzt.... und zwar schießt der gegner der mich durch die wand sieht jetzt nur noch wenn mein y genau = seinem y ist .................. das verstehe ich jetzt überhaupt nicht mehr weil der schuss script ist doch gleich nur er soll ihn einmal machen und einmal nicht aber wenn er den code ausführt, warum dann mit diesem unterschied ????? das ist noch unerklärlicher als das collisionsproblem^^ ich hoffe ihr wisst hilfäääääääääää..... ;)



    EDIT EDIT EDIT 2:

    der macht das nicht wenn y genau gleich y ist sondern wenn mein y um einen pixel höher liegt als sein y????


    ich verzweifel wirklich weil das kann dohc so nciht sein warum ist das so wenn der schon keine kollision mit der wand hat, dann soll der gefälligst auch immer den code ausführen..........

    wenn keine wand ist dann funzt immer noch alles aber sobald die wand da ist scheint der genau zwischen den wandstücken durchzuschauen (ich werde jetzt die wand mal größer machen also höhe = 50 oder so dann werden wir sehen ob da eine lücke zwischen den wänden ist die da nciht hindarf :( :( :(
    Dateien
    • sichtbereich.rar

      (2,07 kB, 124 mal heruntergeladen, zuletzt: )
    Philosophie bedeutet, in einem stockdunklem raum nach einer pechschwarzen katze zu suchen, die gar nicht existiert ;) :D
    ------------------------------------
    Mein Projekt: >>>>>>>>>>>>>>>>>>>> DER EINSAME SCHLORK <<<<<<<<<<<<<<<<<<

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Prinz Martin ()