Zelda Classic Inventar

  • GM 8

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

  • Zelda Classic Inventar

    Servus Community,
    Ich arbeite im Moment an einen RPG. Es ist letzten Endes ein wenig wie Zelda aufgebaut. Sprich es beinhaltet sprinten, springen, etc.
    Nun möchte ich mich aber ans Inventar ranmachen. Nämlich soll es eines sein wie in Zelda 1. Bissher habe ich mir die überlegung gemacht das per Knopfdruck (ESC oder Space) der Raum gewechselt wird (Push from Top).
    In diesen Inventar sollte man nun allerdings 2 Gegenstände auswählen können (wenn möglich den einen mit Rechs, und den anderen mit Linksklick). Sobald man mit der Maus rüberfährt, soll ein String mit den Itemnamen erscheinen. Und das ganze habe ich mir wie folgt überlegt :

    Als erstes wird überprüft ob das Item überhaupt eingesammelt wurde. (ein einfacher If Satz, welcher eine global abfragt.)
    Nun komme ich allerdings zum ersten Problem: Den Text. Da ich den direkten Befehl des Mouse Enter Events nicht kenne benutze ich an dieser Stelle Drag'n'Drop, könnte mir jemand bitte den Code dazu erläutern :/?
    Sobald man das Item mit der Maus linksklickt, schaltet eine Globale Variable auf die Item ID (sprich jedes Item hat eine eigene ID, damit der Gamemaker halt auch wissen soll was jetzt genau ausgerüstet wurde.)
    Hiermit komme ich zu meiner Zweiten Frage : sollte ich um es am Character später anzeigen zu lassen (in der Hand) eher einen Jump to Position befehl oder doch einen Draw benutzen? Was genau sind da nun die vor und nachteile (Jump hängt gerne mal stark hinterher.)

    Also kurz und knapp :

    Space -> Der aktuelle Raum wird "eingefroren" und das Inventar fährt runter.
    Nun wird überprüft ob z.b. das Item "Ladder" vorhanden ist. (if global.item_ladder_got=1)
    Sobald man mit der Maus rüberfährt sollte er den Itemnamen anzeigen.
    Bei einen Links- bzw. Rechtsklick wird das Item nun ausgerüstet.
    durch erneutes drücken von Space schließt sich das Inventar.
    Nun wird mit einen Draw Sprite befehl das Item direkt in die Hände/Hand des Characters gelegt.

    Ich hoffe das ihr ungefähr wisst was ich damit meine und zudem hoffe ich das ihr mir weiter helfen könnt.
    Meine Schwerpunkte sind in Bold makiert.
    Vielen Dank im Vorraus!
    LG Marvin159
  • Marvin159 schrieb:

    Space -> Der aktuelle Raum wird "eingefroren" und das Inventar fährt runter.

    Also ich persöhnlich würde das nicht mit einen Raum machen sondern alles in einem Raum zusammenpastellnt. Setzt eine Variable auf true wenn es geöffnet wird und in jeden Objekt fragst du einfach ab ob diese Variable auf false ist, wenn ja dann darf sie sich bewegen/kämofen/handeln oder was weiß ich und fals true (also wenn das Inventar offen ist, sollte nichts passieren, also überall wo variablen verändert oder bewegt werden kann, muss du eine zusätzliches IF bauen.

    Marvin159 schrieb:

    Sobald man mit der Maus rüberfährt sollte er den Itemnamen anzeigen.

    Es kommt drauf an ob deine Icons (also im Menü) z.B.: Schwert, Schild Objekte sind oder nur gezeichnet werden. Falls es Objekte sind könntest du mit einer einfach if prüfen ob die Maus trüber fährt. Ich mach das immer so.

    GML-Quellcode

    1. if(mouse_x > x && mouse_y > y && mouse_x < x+sprite_width && mouse_y < y+sprite_height) {
    2. draw_text(x,y,"lalalal");
    3. }


    Marvin159 schrieb:

    Bei einen Links- bzw. Rechtsklick wird das Item nun ausgerüstet.

    Hier würde ich entweder Listen bzw. einfache Globale Variablen benutzen. Du könntest jedes Item das ein Player haben kann eine ID geben. (Schwert = 0; Axt = 1, usw.) und eine global Variable die z.B.. global.leftHand heißt.. und wenn jetzt die Axt ausgerüßtet wird setz die global.leftHand auf 1;

    Marvin159 schrieb:

    durch erneutes drücken von Space schließt sich das Inventar.

    Hier setzt du einfach die Variable wieder auf false, damit das Menü zugeht.. Natürlich musst du es verschwinden lassen oder wie auch immer, aber das kannst du bestimmt selbst machen.

    Marvin159 schrieb:

    Nun wird mit einen Draw Sprite befehl das Item direkt in die Hände/Hand des Characters gelegt.

    Im Prinzip würde ich ein Objekt erstellen das immer bei der Position des Spielers gedrawt wird und auch die x && y coords in step verändert werden. Und dieses Objekt prüft ab was in global.leftHand steht und dadurch wird das 'sprite_index' geändert. Natürlich kann man das auf verschiedenste Arten lössen. aber ich würde das so machen.

    Ich hoffe du verstehst was ich meine sonst kannst du mir auch eine PN senden oder hier halt noch mal posten und ich werd sehen was ich für dich tun kann.

    mfg
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Marvin159 schrieb:


    Space -> Der aktuelle Raum wird "eingefroren" und das Inventar fährt runter.
    Nun wird überprüft ob z.b. das Item "Ladder" vorhanden ist. (if global.item_ladder_got=1)
    Sobald man mit der Maus rüberfährt sollte er den Itemnamen anzeigen.
    Bei einen Links- bzw. Rechtsklick wird das Item nun ausgerüstet.
    durch erneutes drücken von Space schließt sich das Inventar.
    Nun wird mit einen Draw Sprite befehl das Item direkt in die Hände/Hand des Characters gelegt.


    also entweder du 'frierst' den Raum mit

    GML-Quellcode

    1. instance_deactivate_all(notme)//bei notme einfach dein Menü eingeben, das wird dann nicht eingefrorern
    2. screen_refresh()


    oder du benutzt eine variable (wie rodrog schon beschrieb)

    GML-Quellcode

    1. global.menue=false

    GML-Quellcode

    1. if global.menue=false
    2. {code fürs bewegen o.ä. }
    3. else exit


    das Menü könntest du dann erscheinen lassen, indem du es oberhalb des Bildschirmrandes erstellst und langsam nach unten fahren lässt. Sobald es dann an einer bestimmten koordinate ist, soll es stoppen.

    Wenn du die Inventar Objekte dann drawst (keine Objekte) würde ich die einzelnen slots mit Variablen besetzen (slot1='empty'; slot1.x=32; slot1.y=32 [...]) und dann mit
    "if place_meeting(slot1.x,slot1.y,Deine.Maus) {draw_text(mouse_x,mouse_y,slot1)} oder so ähnlich. nicht getestet!

    das soll nur ein Ansatz sein bitte nicht übernehmen, es gibt nämlich keine feste Variable für die Maus position (außer x und y). Das könntest du evtl mit einem Objekt, dass x=mouse_x; y=mouse_y oder so hast lösen
  • Rodrog schrieb:

    Marvin159 schrieb:

    Space -> Der aktuelle Raum wird "eingefroren" und das Inventar fährt runter.

    Also ich persöhnlich würde das nicht mit einen Raum machen sondern alles in einem Raum zusammenpastellnt. Setzt eine Variable auf true wenn es geöffnet wird und in jeden Objekt fragst du einfach ab ob diese Variable auf false ist, wenn ja dann darf sie sich bewegen/kämofen/handeln oder was weiß ich und fals true (also wenn das Inventar offen ist, sollte nichts passieren, also überall wo variablen verändert oder bewegt werden kann, muss du eine zusätzliches IF bauen.

    Marvin159 schrieb:

    Sobald man mit der Maus rüberfährt sollte er den Itemnamen anzeigen.

    Es kommt drauf an ob deine Icons (also im Menü) z.B.: Schwert, Schild Objekte sind oder nur gezeichnet werden. Falls es Objekte sind könntest du mit einer einfach if prüfen ob die Maus trüber fährt. Ich mach das immer so.

    GML-Quellcode

    1. if(mouse_x > x && mouse_y > y && mouse_x < x+sprite_width && mouse_y < y+sprite_height) {
    2. draw_text(x,y,"lalalal");
    3. }


    Marvin159 schrieb:

    Bei einen Links- bzw. Rechtsklick wird das Item nun ausgerüstet.

    Hier würde ich entweder Listen bzw. einfache Globale Variablen benutzen. Du könntest jedes Item das ein Player haben kann eine ID geben. (Schwert = 0; Axt = 1, usw.) und eine global Variable die z.B.. global.leftHand heißt.. und wenn jetzt die Axt ausgerüßtet wird setz die global.leftHand auf 1;

    Marvin159 schrieb:

    durch erneutes drücken von Space schließt sich das Inventar.

    Hier setzt du einfach die Variable wieder auf false, damit das Menü zugeht.. Natürlich musst du es verschwinden lassen oder wie auch immer, aber das kannst du bestimmt selbst machen.

    Marvin159 schrieb:

    Nun wird mit einen Draw Sprite befehl das Item direkt in die Hände/Hand des Characters gelegt.

    Im Prinzip würde ich ein Objekt erstellen das immer bei der Position des Spielers gedrawt wird und auch die x && y coords in step verändert werden. Und dieses Objekt prüft ab was in global.leftHand steht und dadurch wird das 'sprite_index' geändert. Natürlich kann man das auf verschiedenste Arten lössen. aber ich würde das so machen.

    Ich hoffe du verstehst was ich meine sonst kannst du mir auch eine PN senden oder hier halt noch mal posten und ich werd sehen was ich für dich tun kann.

    mfg
    Vielen Dank, ich werds mal antesten!

    domis4 schrieb:

    Marvin159 schrieb:


    Space -> Der aktuelle Raum wird "eingefroren" und das Inventar fährt runter.
    Nun wird überprüft ob z.b. das Item "Ladder" vorhanden ist. (if global.item_ladder_got=1)
    Sobald man mit der Maus rüberfährt sollte er den Itemnamen anzeigen.
    Bei einen Links- bzw. Rechtsklick wird das Item nun ausgerüstet.
    durch erneutes drücken von Space schließt sich das Inventar.
    Nun wird mit einen Draw Sprite befehl das Item direkt in die Hände/Hand des Characters gelegt.


    also entweder du 'frierst' den Raum mit

    GML-Quellcode

    1. instance_deactivate_all(notme)//bei notme einfach dein Menü eingeben, das wird dann nicht eingefrorern
    2. screen_refresh()


    oder du benutzt eine variable (wie rodrog schon beschrieb)

    GML-Quellcode

    1. global.menue=false

    GML-Quellcode

    1. if global.menue=false
    2. {code fürs bewegen o.ä. }
    3. else exit


    das Menü könntest du dann erscheinen lassen, indem du es oberhalb des Bildschirmrandes erstellst und langsam nach unten fahren lässt. Sobald es dann an einer bestimmten koordinate ist, soll es stoppen.

    Wenn du die Inventar Objekte dann drawst (keine Objekte) würde ich die einzelnen slots mit Variablen besetzen (slot1='empty'; slot1.x=32; slot1.y=32 [...]) und dann mit
    "if place_meeting(slot1.x,slot1.y,Deine.Maus) {draw_text(mouse_x,mouse_y,slot1)} oder so ähnlich. nicht getestet!

    das soll nur ein Ansatz sein bitte nicht übernehmen, es gibt nämlich keine feste Variable für die Maus position (außer x und y). Das könntest du evtl mit einem Objekt, dass x=mouse_x; y=mouse_y oder so hast lösen
    Alles klar, auch danke an dich :D
    Allerdings passiert es doch (glaube ich) das wenn man es mit der place_meeting variante macht, das der Text dann auch angezeigt wird, wenn das Objekt noch nicht im menü erschienen ist? Sprich wenn man über die Stelle fährt, wo eigentlich das Objekt sein sollte, das der text dann trozdem auftaucht?

    LG Marvin159