problem mit enemy

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

  • problem mit enemy

    hy


    also ich habe mehrere enemys im raum die alle gleich sind....und ich habe einen code geschrieben damit sie den player sehen können und auch nicht....jedoch habe ich gemerkt das es gleich auf alle zu trifft...damit meine ich wenn ich jetzt von einem
    gegner gesehen werde dann erscheint ein zeichen über dem gegner ...aber es erscheinen bei jedem gegner der selben art das zeichen....wie mach ich das nur der der dem player am nächsten ist ihn sieht???

    mit instance_nearest denk ich mal ...jedoch hab ich damit probleme wo soll ich das rein?? ich hab den ganzen code mit der collision also dem gesehn werden vom player alles im step event vom enemy...
  • Wie sieht den der code aus, wenn sie ihn sehen? Stellst du vielleicht eine globale variable um, da alle Gegner reagieren? Oder sthet der code im obj_playerr und stellt im obj_enemy die variable um?

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • du musst zuweißen welche instanz darauf reagieren soll... wenn du jetzt z.B.: schreibst obj_gegner soll reagieren dann reagieren alle. wenn du es aber genau hinweißt wie jetzt z.B.: inst= instance_nearest(x,y,inst.x,inst.y);

    und dann greifst immer auf die instanz mit inst. zu
    Wir stehen zusammen und wir fallen zusammen
  • @Aku_Ryou

    ja richtig ich hab im player create event die globale variable gesehen erstellt...und im emeny step event hab ich eine variable erstellt in der collision line gespeichert ist ..eine für links eine für rechts...und wenn eine collision ist mit dem player dann wird eins von den 2 scripts die ich erstellt habe für jede seite ausgeführt...in den scripts hab ich nur ein paar if abfragen abfrage mit denen ich abfrage ob er gesehen wird oder nicht.


    @Eddysoulo
    ja soetwas dachte ich mir schon....also muss ich im gegner objekt ne variable erstellen in der ich das instanz =instance_nearest(x,y,obj_enemy.x,obj_enemy.y) speichere...und dann in meinem script dann zb with(instanz) und dann die ganzen abfragen ob er ihm sieht oder nicht....hab ich das richtig verstanden???

    sorry hab noch nie mit instance_nearest gearbeitet
  • @acidrain833 so in etwa nur würde ich es nicht im gegner machen sondern im player und dann wie du geschreiben hast mit with arbeiten... jetzt als bsp: im player step event:

    var inst = instance_nearest(x,y,inst.x,inst.y);

    with(inst){
    attacke();

    }
    Wir stehen zusammen und wir fallen zusammen
  • danke habs jetzt hinbekommen...es sieht mich nur einer juhuuuu

    aber da gleich noch ein problem...ich habe ein mehrstöckigen raum....und wenn ich unter einem gegner stehe sieht er mich auch obwohl das ja nicht gehen sollte da er mich ja nur sehn kann wenn ich in der collision line bin....

    und die collision line geht nur 300 pixel entweder nach rechts oder links..(je nachdem welche richtung der gegner gerade geht);

    wieso sieht er mich dennoch??
  • Scheinbar geht deine Collision-Line dann nicht nur nach links oder rechts, sondern eher 360°.
    Entweder du passt die Collision-Line so an, dass es wirklich nur links oder rechts geht, oder du erstellst für deinen Spieler und deinen Gegner eine zusätzliche Variable, die angibt in welchem Stockwerk sich befinden.
    Als zusätzliche Bedingung für "vom Feind gesehen" müssen dann auch noch die Stockwerke identisch sein.

    Ist ein bisschen quick and dirty, deshalb vielleicht lieber die Collision-Line reparieren.
    Dieser Beitrag wurde bereits 1909 mal editiert, zuletzt von »Sharivari« (Morgen, 19:89)
  • die collision line passt hab für links diesen code collision_line(x-300,y,x,y-1) und für rechts einfach ein +300;


    ja das mit einer neuen variable für die stockwerke hab ich auch schon daran gedacht jedoch hab ich schon einige globale variablen und diese verbrauchen ja sehr viel speicher....deshalb eher keine variable
  • @Eddysoulo

    also im player step create event hab ich ein paar globale variablen initialisiert...dann hab ich im step event vom player diesen kleinen code

    GML-Quellcode

    1. inst = instance_nearest(x,y,obj_enemi);
    2. if (global.gesehen == 1)
    3. {
    4. with (inst)
    5. {
    6. instance_create(x,y-50,obj_rufzeichen) // ist überflüssig wollte ich nur zum testen machen
    7. }
    8. }
    9. else if (global.gesehen == 0)
    10. {
    11. with (obj_rufzeichen)
    12. {
    13. instance_destroy();
    14. }
    15. }
    Alles anzeigen




    dann im enemi obj im step event diesen code

    GML-Quellcode

    1. var collleft = collision_line(x-300,y,x,y-1,obj_player,true,true);
    2. var collright= collision_line(x+300,y,x,y-1,obj_player,true,true);
    3. if (collleft )
    4. {
    5. scr_player_seen_left();
    6. }
    7. if (collright)
    8. {
    9. scr_player_seen_right();
    10. }
    Alles anzeigen




    und dann im scr_player_seen_left

    GML-Quellcode

    1. //////!!!----Normales Sichtfeld-----!!!////////
    2. if (global.sichtbar == false)
    3. {
    4. if (global.facing == "left")&& (global.gesehen == 0)
    5. {
    6. global.gesehen = 1;
    7. }
    8. if (global.facing == "left")&& (global.gesehen == 1)
    9. {
    10. global.gesehen = 1;
    11. }
    12. if (global.facing == "right")&& (global.gesehen == 1)
    13. {
    14. global.gesehen = 0;
    15. }
    16. if (global.facing == "right")&& (global.gesehen == 0)
    17. {
    18. global.gesehen = 0;
    19. }
    20. }
    21. /////!!!!------Wenn dunkel-----!!!!////
    22. if (global.sichtbar == true)
    23. {
    24. //Linke Seite
    25. if (global.facing == "left")&& (global.gesehen == 0)&& (global.seen == 1)
    26. {
    27. global.gesehen = 1;
    28. }
    29. if (global.facing == "left")&& (global.gesehen == 1) && (global.seen ==1)
    30. {
    31. global.gesehen = 1;
    32. }
    33. if (global.facing == "left") && (global.seen ==0)&&(global.gesehen == 1)
    34. {
    35. global.gesehen = 0;
    36. }
    37. if (global.facing == "left")&& (global.seen == 0)&&(global.gesehen == 0)
    38. {
    39. global.gesehen = 0;
    40. }
    Alles anzeigen




    global.seen bedeutet wenn es 1 ist das er im licht steht und 0 nicht im licht
    global.gesehen bedeutet wenn der enemy den player sieht
    global.sichtbar bedeutet wenn 1 das es dunkel ist und 0 das es hell ist



    mir ist aufgefallen das immer 1 enemi trotzdem das rufzeichen zeichnet obwohl er mich nicht sieht also global.gesehen auf 0 ist. komisch