Ringmenu für ein RPG

  • GM 8

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

  • Ringmenu für ein RPG

    Moin gm-d Community,
    ich habe mal wieder eine Frage zum Inventar.
    Nämlich bin ich grade dabei Sprites für ein Ringmenu anzufertigen.
    Falls ihr nicht wisst was ein Ring menu ist :
    avangs.info/files/attach/images/230469/140/233/RingMenu.jpg

    Und zwar hatte ich es mir wie folgt gedacht:
    Sobald man Space drückt erscheinen die verschiedenen Symbole.
    Welches der Symbole grade "makiert" ist entscheidet eine Globale variable.
    Nennen wir diese einfach mal "global.menupos"

    Nun wird überprüft ob A oder D gedrückt wird. Beim Druck auf A sinkt die variable relativ um -1 und bei D steigt sie relativ um 1.
    Da es 5 Symbole sind wird nun gesagt

    GML-Quellcode

    1. if global.menupos <= 0
    2. {
    3. global.menupos = 5
    4. }


    und dementsprechend halt auch

    GML-Quellcode

    1. if global.menupos >= 6
    2. {
    3. global.menupos = 1
    4. }


    Wenn nun erneut Space gedrückt wird, dann wird das menu geöffnet, welches dementsprechend makiert wurde.

    Nun meine Frage an euch :

    Meint ihr das dieser Weg gut hinhauen wird oder hättet ihr einen besseren Vorschlag dafür?

    LG Marvin159

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

  • Ich kann mich erinnern, ein Ringmenü genauso aufgebaut zu haben. Ein Tipp - verwende die lengthdir_x/y-Funktionen zum Zeichnen jedes Rings.
    Wenn du die Ringe jetzt z.B. in einer for-Schleife zeichnest, gibst du als deren Mittelpunkt die Koordinaten der Spielfigur plus die lengthdir-Funktion an. Die Länge bleibt immer gleich, und der Winkel ist (360/5)*Laufvariable.
    Das musst du natürlich auf die aktuelle Position anpassen. Nur eine Anmerkung von mir.

  • woku schrieb:

    Ich kann mich erinnern, ein Ringmenü genauso aufgebaut zu haben. Ein Tipp - verwende die lengthdir_x/y-Funktionen zum Zeichnen jedes Rings.
    Wenn du die Ringe jetzt z.B. in einer for-Schleife zeichnest, gibst du als deren Mittelpunkt die Koordinaten der Spielfigur plus die lengthdir-Funktion an. Die Länge bleibt immer gleich, und der Winkel ist (360/5)*Laufvariable.
    Das musst du natürlich auf die aktuelle Position anpassen. Nur eine Anmerkung von mir.
    mhm.. Tut mir leid, aber ich kann grade nicht ganz genau nachvollziehen was du meinst, da ich nur ganz selten, bis garnicht mit lengthdir arbeite :/

    Könntest du es mir an hand eines codes verdeutlichen, wäre sehr nett :)

    LG Marvin159
  • Im draw-event der Spielfigur:

    GML-Quellcode

    1. var i;
    2. i = 0;
    3. ringsprite[0] = global.menupos.sprite_index //nur theoretisch, ich meine das Sprite von dem Ring an der Stelle von global.menupos
    4. /* ringsprite[1]-[5] im Code einspeichern */
    5. for(i=0;i<6;i+=1)//der folgende Code wird 5-mal ausgeführt, dabei wird i immer um eins erhöht
    6. {
    7. draw_sprite(ringsprite[i],0,x+lengthdir_x(ringabstand,360/5*i),y+lengthdir_y(ringabstand,360/5*i)) //Es werden jetzt reihum 5 Ringe in dem selben Abstand gezeichnet
    8. }

    Da ich deinen restlichen Code nicht kenne und nicht weiss, wie die du die Sprites jedes einzelnen Rings abspeicherst, kann ich es nicht wirklich anhand von Code verdeutlichen :/
    -woku

  • woku schrieb:

    Im draw-event der Spielfigur:

    GML-Quellcode

    1. var i;
    2. i = 0;
    3. ringsprite[0] = global.menupos.sprite_index //nur theoretisch, ich meine das Sprite von dem Ring an der Stelle von global.menupos
    4. /* ringsprite[1]-[5] im Code einspeichern */
    5. for(i=0;i<6;i+=1)//der folgende Code wird 5-mal ausgeführt, dabei wird i immer um eins erhöht
    6. {
    7. draw_sprite(ringsprite[i],0,x+lengthdir_x(ringabstand,360/5*i),y+lengthdir_y(ringabstand,360/5*i)) //Es werden jetzt reihum 5 Ringe in dem selben Abstand gezeichnet
    8. }

    Da ich deinen restlichen Code nicht kenne und nicht weiss, wie die du die Sprites jedes einzelnen Rings abspeicherst, kann ich es nicht wirklich anhand von Code verdeutlichen :/
    -woku
    Ah, ich verstehe wie dus meinst :)

    Vielen Dank das du dir die Mühe gemacht hast!
    Hat mir sehr geholfen.

    LG Marvin159
  • Kleine Anmerkung:

    GML-Quellcode

    1. var i;
    2. i = 0;
    3. ringsprite[0] = global.menupos.sprite_index //nur theoretisch, ich meine das Sprite von dem Ring an der Stelle von global.menupos
    4. /* ringsprite[1]-[5] im Code einspeichern */
    5. for(i=0;i<6;i+=1)//der folgende Code wird 5-mal ausgeführt, dabei wird i immer um eins erhöht
    6. {
    7. draw_sprite(ringsprite[i],0,x+lengthdir_x(ringabstand,360/5*i),y+lengthdir_y(ringabstand,360/5*i)) //Es werden jetzt reihum 5 Ringe in dem selben Abstand gezeichnet
    8. }


    //der folgende Code wird 5-mal ausgeführt, dabei wird i immer um eins erhöht

    Tatsächlich wird er 6 mal ausgeführt, da ja i=0 , i=1...i=5 jedesmal <6 ist und somit ausgeführt wird

    also entweder statt

    GML-Quellcode

    1. i=0 i=1//das hier


    oder statt

    GML-Quellcode

    1. for(i=0;i<6;i+=1) for(i=0;i<5;i+=1)//das hier
    verwenden.
    Ansonsten sehr guter denkanstoß, wär ich so direkt nicht drauf gekommen.
    (villeicht noch als erledigt markieren?)


    greetz Partik