GUI in GM:Studio

    • Konzeptfrage

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

    • GUI in GM:Studio

      Guten Morgen :)

      Und zwar wollte ich einfach mal von euch wissen: Wie verwirklicht ihr eure GUI´s in euren Spielen?
      Ich habe irgendwie Probleme den richtigen Weg zu finden. Einerseits möchte ich die Button als eigene Objekte behandeln, also mit ihnen
      arbeiten ohne viel Code. d.h. Möchte das Interface im Raumeditor schon basteln.

      Aber ich komme irgendwie nicht auf einen grünen funktionierenden Zweig.

      Was gibt es in GM für wege um ein GUI hinzubekommen? Mit Views natürlich. Mein Gedanke war zwei Views zu benutzen:

      Ein View für die Spielwelt und ein View für das GUI. Aber das mag nicht so recht funktionieren. (Na gut es is schon spät... oder früh? :) :)
    • Entweder drawst du alles in einem Code und führst entsprechende abfragen bei interaktiven GUI-Elementen durch oder du arbeitest mit Objekten und passt die Koordinaten der GUI-Objekte im Step-Event an die Koordinaten des Views an. Zwei Views klingen kompliziert und wären wohl auch nur möglich, wenn das GUI aus einem undurchsichtigen zusammenhängendem Rechteck bestehen soll.
    • Danke dir schonmal für die fixe Antwort... um diese Uhrzeit :D

      Das Problem was ich eben habe ist, das ich eine Zoom funktion eingebaut habe. Das einfach den View zoomt. Aber ich möchte eben nicht das das GUI im selben view gedrawt wird, weil es sonst auch
      mitgezoomt wird. Das mit den Zwei views probiere ich nun schon eine weile und ja... ist zu kompliziert... das habe ich auch festegestellt.

      Dann muss ich entweder das zoomen anders lösen, oder eine andere möglichkeit finden :)
    • Also in dem Fall würde ich keine Objekte benutzen sondern alles nur drawen lassen und dadurch viel Code in ein Objekt passen. Im Grunde genommen hast du bei mehreren Objekten den Code einfach nur aufgeteilt aber die Menge ist recht gleich. Durch checken wo der Mauszeiger am Display ist, bekommst du auf jeden Fall immer die richigen Koordinaten um die versch GUI Elemente abzufragen.

      ancient-pixel.com
      youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
    • Ich sehe schon komme an dieser Methode nicht vorbei :) Danke auch dir für die Antwort.

      Ich finde das nur unnötig kompliziert, mich im Quellcode mit X Koordianten rumzuschlagen von mehreren Buttons etc, und habe darum versucht das "einfacher" zu lösen.
    • Früher habe ich Guis immer aus einzelnen Objekten erstellt, dass war aber recht unübersichtlich nach einiger Zeit, also lasse ich immer alles im Draw Gui zeichnen und frage immer die Position der Maus über point_in_rectangle ab um dann das gleiche Ergebniss zu erzielen, als wenn ich Objekte benutzt hätte.

      -Nils (Wollte auch meinen Senf dazu geben :P)
    • Japp Danke Nils Senf is immer gut ;) Genau so werd ich es nun auch machen. Aber ich denke wenn man mal ein GUI von einem MMORPG zb ansieht das Drölf hundert knöpfe hat... muss es doch einfacher sein ein GUI zu erstellen.
      Vor allem das sich dann noch den verschiedenen Auflösungen anpasst... usw usw.

      Ein Tool wäre vll nicht schlecht, in dem man das GUI zusammenbastelt und dann GML Code ausgibt. Hust Hust Wink mit Zaunpfahl an die Tool Entwickler :D
    • Mitunter schieße ich übers Ziel hinaus, aber leg einfach ein Grid an das die höchste Auflösung an Zellen hat ohne zu groß zu sein ([32][18]zB) und wenn die Maus klickt, leg die Koordinaten aufs Grid und stelle dort von 0 auf 1 um, nach dem Klick rennt eine Schleife durch und bei [32][1] == 1 draw was oder tu was.
      Du musst dir halt vorher genau dein UI designen, wo was ist und wie es aussieht.
      Das funktioniert natürlich bei einer gröberen "Auflösung" des Grids nur bei sehr symetrischen Menüs und gleich großen Knöpfen und es kann sich immer an die Auflösung anpassen durch den Faktor bei der Umrechnugn von echer Mauskoordinate zu der Größe des grids.

      Ansonsten ist aber point_in_rectangle und point_in_circle, etc auch nicht so aufwendig.

      ancient-pixel.com
      youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
    • Klingt nach einem tollen Lösungsansatz. Mal rumspielen damit :)

      Edit: Gerade mal Google gefragt. Funktion gibt es erst ab 1.3. Habe aber eine Alternative gefunden.



      Aber gerade probiere ich es mit der point_in_rectangle etc funktion. Aber glaube mein GM:Studio nimmt mich etwas auf den Arm :(

      GML-Quellcode

      1. Unknown function or script: point_in_rectangle


      Den Befehl gibt es bei mir wohl nicht 8|
      Obwohl ich ihn aus der Hilfe rauskopiert habe... Genau wie point_in_cirlce und point_in_triangle.

      GM:Studio Version 1.2.1264

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

    • point_in_rectangle ist meines Wissens erst in Version 1.3.xxxx mit ins Boot genommen worden ;)

      Es ist einfach nur eine vereinfachung für x und y abfragen, aber hier mal ein kleines skript von mir:

      point_in_rectangle

      GML-Quellcode

      1. /*
      2. px = X Punkt der abgefragt werden soll
      3. py = Das selbe nur mit y
      4. xx & yy = Oben Links
      5. xxx & yyy = unten rechts
      6. */
      7. var px,py,xx,yy,xxx,yyy,inside;
      8. px = argument0;
      9. py = argument1;
      10. xx = argument2;
      11. yy = argument3;
      12. xxx = argument4;
      13. yyy = argument5;
      14. inside = 0;
      15. if px >= xx && px <= xxx && py >= yy && py <= yyy
      16. inside = 1;
      17. else
      18. inside = 0;
      19. return inside
      Alles anzeigen


      Beispiel: point_in_rectangle(mouse_x,mouse_y,x-8,y-8,x+8,y+8 )

      //EDIT: Bei mir funktioniert dieses Skript ;)

      -Gruß Nils ;)

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

    • Michaelp800 schrieb:

      In Studio gibt es doch so ein komisches Draw GUI-Event.
      Braucht das jemand von euch? Ich arbeite immer noch normal mit Draw.

      Kommt auf dein Spiel an, ich benötige es auch nicht und arbeite auch ganz einfach mit Draw.

      Allerdings hat das bei mir den technischen Hintergrund das ich mein momentanes Menü in, ich nenne es Tafeln unterteile.
      Das sind Gruppen von Objekten, egal ob Buttons, Eingabefelder oder der gleichen die ich durch eine liste vorladen lasse und welche dann wie ein einziges Objekt agieren, also einblenden, verschieben, löschen ect.
      So sind Untermenüs auf welche weise auch immer sehr leicht realisierbar.

      z.B. Spiel startet und die Tafel Login Menü wird geladen. Sobald man sich einloggt wird sie nicht mehr benötigt, also wird die Tafel Login gelöscht mit allen Buttons und Eingabefeldern die dazu gehören.
      Oder man benötigt während des Spiels das Handelsfenster, da dies auch eine Tafel ist wird die Tafel dazu aufgefordert sich in den Bildschirm zu verschieben und sobald eine andere Tafel benötigt wird sich wieder zu verzupfen.
      Sehr schön ist dabei auch das verändern des Menüs, da beim erstellen der Liste für eine Tafel nur ein weiteres Objekt mit relativen Koordinaten hinzugefügt werden muss.

      Denke es gibt sehr viele Möglichkeiten ein UI zu erstellen, mann sollte sich etwas Gedanken darüber machen und nicht einfach den schnellsten Weg wählen, sonnst hat man hinterher eventuell ne Menge an Mehrarbeit.
    • Das klingt interresant BoS. Und klingt auch in meinen augen Professionell.
      So kann man "einfach" auch mehrere Fenster öffnen?

      Ich denke da nun einfach an WoW oder an ein anderes MMO. Da hat man einfach mal das Charakterfenster auf, Briefkasten, Inventar und daneben noch das AH und Itemvorschau.
      Viele fenster gleichzeitig. Oder wie du es nennst "Tafeln". Dann müsste man aber auch irgendwie die Reinfolge der Tafeln steuern und welche gerade den Focus hat usw.
    • Das geht automatisch, wenn du von einer Tafel einen Button, Eingabefeld oder auch nur eine Grafik anklickst dann steht diese Tafel im Fokus und wird in den Vordergrund gerückt. Das ist das gleiche wie mit dem Focus für Eingabefelder, ich habe mehrere Eingabefelder, egal auf welcher Tafel die liegen, und es gibt eine Variable für den Focus. Jedes Eingabefeld frägt diese Variable ab ob sie denn die eigene ID enthällt, wenn ja wird der keystring auf das Eingabefeld gezeichnet, wenn nein na dann eben die letzte bekannte Eingabe. Genauso mit den Tafeln, wenn die Focus Vaiable ihre ID enthällt wird die Depth eben kurzzeitig um z.B. 100 verringert, wenn nicht dann auf den Ursprungswert gesetzt.

      Ich benutze z.B. für die Bewegung der Tafeln ein Obj namens "obj_move".
      Wenn ich einen Button klicke welcher eine Tafel einblenden soll, erstellt der Button ein "obj_move" welchem er die Tafel-ID, Startposition, Endposition, Geschwindigkeit, Beschleunigung, Startsound, Endsound, ect. übergibt und welches dann die Bewegung ausführt. Das "obj_move" sieht nach wie viele Objekte in der Liste der Tafel sind und verschiebt diese pro Step um den errechneten wert. Wenn es fertig ist löscht es sich selbst.

      So können beliebig viele Tafeln gleichzeitig verschoben werden, in meinem Login kommen z.B. die beiden Menütafeln von Links und Rechts in den Loginscreen, gleichzeitig wird aber die Logotafel nach oben gerückt. Wenn ich durch das Menü auf der Linken Tafel klicke wird jeweils die Rechte Tafel nach unten rausbewegt und die aktuelle von Rechts an deren stelle gerückt.
      Das ganze wende ich dann auch später für alle anderen Menüs an.
      Ich wollte etwas Dynamik ins Menü bringen und gleichzeitig mich später nicht mehr um die Einzelheiten kümmern müssen wenn ich daran noch etwas verändere.
    • Genau das ist auch mein Ziel so eine GUI in mein spiel zu integrieren.

      Das das so gut wie von alleine läuft und mich nich um die ganzen Einzelheiten mehr kümmern muss. Daran arbeite ich auch gerade.
      Aber deine Denkanstöße helfen mir schonmal sehr weiter Bos. Besonders das obj_move objekt. Das klingt plausibel und nimmt sicher wenn es läuft viel Arbeit ab.

      Danke nochmal :)
    • Benutzer online 1

      1 Besucher