Wie erstelle ich einen Radar?

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

    • Wie erstelle ich einen Radar?

      Wie erstelle ich einen Radar?
      von Glowing Orb
      benötigt GM 6.0/GM 6.0r

      Zuerst muss man sich im klaren sein, welche Art von Radar man erstellen will.

      Einen runden oder einen eckigen Radar?
      Eine detailreiche Minimap oder einen einfachen Positions-Radar?
      etc....

      Ob rund oder eckig ist eigentlich reine Geschmacksache (ich bevorzuge rund); eine detailreiche Minimap allerdings kann ein Game zwar optisch stark aufwerten, allerdings muss man dabei aufpassen, dass man sein Spiel nicht zu sehr ausbremst (was bei zu vielen Draw-Funktionen schnell pasieren kann).

      Deswegen werden wir in diesem Fall einen runden Radar erstellen, der alle Gegner anzeigt, die sich innerhalb einer bestimmten Entfernung zum Spieler befinden.

      Zuerst benötigen wir ein Controller-Objekt, mit einer möglichst niedrigen Depth (z.B. -1661992959), visible und nicht solid. Sprite und mask sind egal.

      Dann benötigen wir ein neues Script (mann kann natürlich auch mit "execute a piece of code" arbeiten, ich benutze aber aus Gründen der Wiederverwendbarkeit fast immer Scripts.

      GML-Quellcode

      1. // GO's Radar
      2. x = view_xview[view_current]; // Diese beiden Zeilen platzieren den Radar in der
      3. y = view_yview[view_current]; // linken oberen Ecke des Bildschirms.
      4. draw_set_color(c_white);
      5. draw_circle(x + 70,y + 70,64,0);
      6. draw_set_color(c_black);
      7. draw_circle(x + 70,y + 70,62,0);
      8. draw_set_color(c_white);
      9. draw_circle(x + 70,y + 70,2,0);
      10. //Die obigen Zeilen haben einen schwarzen Kreis mit weißer Umrandung und
      11. //weißem Mittelpunkt erstellt. (Um genau zu sein waren es 3 konzentrische
      12. ///Kreise: ein großer Weißer, ein etwas kleinerer Schwarzer und noch ein sehr
      13. //kleiner Weißer
      14. draw_set_color(c_red);
      15. for (n = 0; n < instance_number(obj_enemy); n += 1) {
      16. object = instance_find(obj_enemy,n);
      17. if (point_distance(obj_player.x,obj_player.y,object.x,object.y) < 1200) {
      18. draw_circle(x + 70 - (obj_player.x - object.x)/20,y + 70 - (obj_player.y - object.y)/20,2,0);
      19. }
      20. }
      21. // Mit dem obigen Block zeichnet man pro obj_enemy
      22. // einen kleinen roten Kreis - aber nur wenn es näher als 1200 Pixel zum
      23. // Spieler ist
      Alles anzeigen


      Nun noch das Script ins Draw Event des Controller Objects packen, obj_player und obj_enemy erstellen, den Controller und den Spieler je einmal in einen Room stecken, den Gegner ruhig mehrmals, und fertig ist der Radar.
      Jetzt könnt ihr noch etwas mit den Farben experimentieren.

      Add-On: Bewegungssensor

      Wenn man die Zeile

      GML-Quellcode

      1. if (point_distance(obj_player.x,obj_player.y,object.x,object.y) < 1200)

      durch

      GML-Quellcode

      1. if ((point_distance(obj_player.x,obj_player.y,object.x,object.y) < 1200) && (object.speed <> 0)

      ersetzt, kann man einen Bewegungssensor wie bei Time Splitters 2 programmieren (natürlich nur, wenn man für die Gegner speed zur Fortbewegung nutzt). D.h., dass die Einheit nur sichtbar ist, wenn sie sich bewegt.



      Das wars auch schon wieder - euer GO.
      www.glowingorb.de
      „Wenn es im Universum noch irgendwo intelligente Lebewesen gibt, dann kennen sie vielleicht Schach, höchstwahrscheinlich jedoch GO

      (Schachweltmeister Emanuel Lasker)

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

    • Find ich gar net mal so schlecht, is mal eben ein Simples Radar gut für Anfänger erklärt!

      @Nici:

      GML-Quellcode

      1. object = instance_find(obj_enemy,n);

      Diese Zeilen musst du je nachdem, welches Objekt du dafür haben willst verändern.

      €dit @Nici: Das ist doch genau was ich meinte >_>

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

    • for (n = 0; n < instance_number(obj_enemy); n += 1) {
      object = instance_find(obj_enemy,n);
      if (point_distance(obj_player.x,obj_player.y,object.x,object.y) < 1200) {
      draw_circle(x + 70 - (obj_player.x - object.x)/20,y + 70 - (obj_player.y - object.y)/20,2,0);
      }
      }
      Kopieren und den obj-namen ändern
    • sieht interessant aus, dennoch hasse ich den Käfer in deiner Signatur... dafür großes MINUS!
      Nein, Scherz, sieht gut aus ^^
      So far, Schattenphoenix~
      _____________________________________________________________________________
      "Who needs a stairway to heaven...
      If there is an elevator to hell... ?
      "
      - Vergessen
      "Auch ein perfektes Chaos ist etwas vollkommenes."
      - Jean Genet
    • Wie erstelle ich ein Radar? v.2.1

      > Hier mal ein kleines (aber feines :D) update zu diesem alten Radarscript (v.2.0).
      > Noch ein Update (v.2.1)! ->Zwei Bugs beseitigt.

      Verbesserungen zum Glowing Orb's:
      Spoiler anzeigen
      > (8)) Grafik
      > (:)) Argumentsteuerung
      > (:|) Nur noch Pro-User


      Screenshot:


      Download:
      Link (83,35 kB, zip-Archiv: radar.gmk)

      @Glowing Orb: mist, das hab ich übersehen!^^

      Dateien
      • radar.zip

        (83,35 kB, 246 mal heruntergeladen, zuletzt: )

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

    • @planer-raver: schau dir mal die zeichenfunktion

      GML-Quellcode

      1. draw_rectangle(x1,y1,x2,y2,outline)

      in der HIle an, könnte hilfreich sein.

      @aEro: Wenn du die funtionsweis grob verstanden hast brauchst du keinen Crediteintrag, würde mich aber trotzdem darüber freuen; Wenn aberjemand nur stupide abkopiert ohne sich gedanken über den Code zu machen, verlange ich eine Crediteintrag - ich vertrau da einfach mal auf deine Ehrlichkeit ;-)

      @florpp: Freut mich dass jemand das Scipt weiterentwickelt, aber ich habe einen leine Bug entdeckt - die roten Punkte können sich außerhalb des Radarschirms bewegen, war das bei meinem Script auch schon so?
      www.glowingorb.de
      „Wenn es im Universum noch irgendwo intelligente Lebewesen gibt, dann kennen sie vielleicht Schach, höchstwahrscheinlich jedoch GO

      (Schachweltmeister Emanuel Lasker)
    • Planet-Raver schrieb:

      soll ich das ganze dann so machen?!

      GML-Quellcode

      1. draw_rectangle(view_xview[view_current] ,view_yview[view_current],view_xview[view_current],view_yview[view_current],outline)

      des outline erkennt der nich ?( ich bin ein noob. sry
      Bei "outline" musst du entweder 0 oder 1 reinschreiben.

      © 2008 by Teamgrill Productions
    • Planet-Raver schrieb:

      GML-Quellcode

      1. draw_rectangle(view_xview[view_current] ,view_yview[view_current],view_xview[view_current],view_yview[view_current],outline)



      Das, was du da geschrieben hast, ist kompletter Schwachsinn. Ein Rechteck hat bekanntlich vier Eckpunkte. Du musst also die Koordinaten der Eckpunkte "oben links" und "unten rechts" angeben. Dann wird daraus dein Rechteck gezeichnet. Du hast in deinem Code aber zwei mal denselben Punkt definiert, was bedeutete, dass gar kein bzw ein 1-Pixel-grosses Bild entsteht.

      Wie Soul Reaver noch geschrieben hat, musst du bei "outline" angeben, ob du willst, dass nur die Outline (Aussenlinie / Rahmen), oder das gesamte Rechteck mit Füllung gezeichnet wird. Wie du wissen solltest, ist das eine boolesche Variable (kurz bool). Das heisst, sie kann entweder True (wahr) oder False (falsch) sein.

      Merke:
      True = 1
      False = 0

      Wenn du also nun willst, dass nur die Umrahmung gezeichnet wird, so setze bei "outline" eine 1. Ansonsten eine 0, damit dein Rechteck ausgefüllt wird.


      MfG flogy
    • hmm... okay, danke. ich hab jetz diesen code genommen, aber es geht immer noch nicht...

      ich habe 3 views, einen für meinen player, einen für die item anzeige und einen für den radar, eben der 3. view
      und um den 3. view soll einfach ein weißer rahmen gesetzt werden. wie mache ich also dass der rahmen um den view ausgerichtet ist und auch immer um diesen view bleibt, auch wenn sich die anderen views bewegen
      mein code:

      GML-Quellcode

      1. draw_rectangle_color(view_xview[3]-55,view_yview[3]-55,view_xview[3]+55,view_yview[3]+55,c_white,c_white,c_white,c_white,false) // Die + und -55 hab ich gemacht weil ich mir denke dass das ganze von der Mitte des views ausgeht...

      weiß einer weiter?