Inventar

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

    • Hallo Community.

      Ich weiß es gibt schon jede Menge Tutorial über das Inventar trotz dessen würd ich euch gerne "meine" Version vorstellen.

      Was ihr braucht:
      5 Sprites

      GML-Quellcode

      1. spr_inventory
      2. spr_inv_slot
      3. spr_item_nothing
      4. spr_inv_apple


      und 4 Skripte

      GML-Quellcode

      1. scr_inventory_draw
      2. scr_inventory_move
      3. scr_inventory_click
      4. scr_inventory_add


      als erstes erstellen wir ein Objekt und nennen es "obj_controler".
      In diesem Objekt lassen wir erstmal via. Create Event ein paar Variablen deklaieren.
      Spoiler anzeigen

      GML-Quellcode

      1. show = false // wird für dich Sichtbarkeit des Inventars benötigt.
      2. slot[0]=spr_item_nothing
      3. slot[1]=spr_item_nothing
      4. slot[2]=spr_item_nothing
      5. slot[3]=spr_item_nothing
      6. slot[4]=spr_item_nothing
      7. slot[5]=spr_item_nothing
      8. slot[6]=spr_item_nothing
      9. slot[7]=spr_item_nothing
      10. slot[8]=spr_item_nothing


      das sind die Slots für das Inventar.

      Nun kommen wir zum interessantem Teil, dass skripten des Inventars.
      Wir fangen an mit scr_inventory_draw:
      Spoiler anzeigen

      GML-Quellcode

      1. //scr_inventory_draw//
      2. exitkey = argument0 //Argumente kann man sich denken was das ist, später dann sowas wie scr_inventory_draw(argument0) z.B
      3. if exitkey = false //Wenn die Variable "false" ergibt...
      4. {
      5. exit; //Beendet sich der Script.
      6. }
      7. posx = 36
      8. posy = 56
      9. //wird später erklärt dies dient zur Positions Speicherung.
      10. draw_sprite(spr_inventory,0,view_xview+32,view_yview+32) //Einen Sprite zeichnen die funktion lässt sich so einfach erklären: draw_sprite(sprite,image_index,x,y). view_xview und view_yview machen das es permanent im View ist sprich wenn wir zur seite gehen bleibt es an seiner Position und verschwindet nicht einfach aus dem Bild.
      11. count=0 // eine normale integer Variable.
      12. // Nun lassen wir die einzelnen Slots zeichnen dies ist sehr einfach wenn man einfach eine for-schleife benutzt.
      13. for(i=0;i<3;i+=1) // i = 0 <= Variable, i<3 <= Solange i kleiner als 3 ist...,i+=1<= wird 1 zu i gezählt Dies ist die Y Position.
      14. {
      15. for(a=0;a<3;a+=1) // das gleiche nochmal für die X Position.
      16. {
      17. draw_sprite(obj_controler.slot[count],0,view_xview+posx,view_yview+posy) // obj_controler.slot[count] ist der momentane Slot und auch gleich der beinhaltende Sprite. view_xview/yview + posx/y ist nichts anderes als oben nur mit einer Variable.
      18. count +=1 // er soll ja nicht immer den gleichen slot zeichnen deshalb erhöhen wir das Value!
      19. posx += 36 // damit die Position sich auch ändert.
      20. }
      21. posx = 36 // resetten der Variable
      22. posy += 36 //das gleiche wie oben nur damit es eine Zeile tiefer geht.
      23. }
      Alles anzeigen


      danach scr_inventory_move <- Check ob die Maus sich über einen der Slots befindet.
      Spoiler anzeigen

      GML-Quellcode

      1. //scr_inventory_move//
      2. x1 = view_xview[0]+32
      3. y1 = view_yview[0]+32
      4. //deklaieren von ein paar Variablen diese werden gleich verwendet
      5. //Row 1
      6. if (mouse_x > x1+4) && (mouse_x < x1+37) && (mouse_y > y1+24) && (mouse_y < y1+57) // wenn die Mausposition sich in diesem Kästchen befindet dann...
      7. {
      8. scr_inventory_click(0) //wird dieser script ausgeführt
      9. exit // und der momentane script beendet.
      10. }
      11. if (mouse_x > x1+40) && (mouse_x < x1+73) && (mouse_y > y1+24) && (mouse_y < y1+57)
      12. {
      13. scr_inventory_click(1)
      14. }
      15. if (mouse_x > x1+76) && (mouse_x < x1+109) && (mouse_y > y1+24) && (mouse_y < y1+57)
      16. {
      17. scr_inventory_click(2)
      18. }
      19. //Row 2
      20. if (mouse_x > x1+4) && (mouse_x < x1+37) && (mouse_y > y1+60) && (mouse_y < y1+93)
      21. {
      22. scr_inventory_click(3)
      23. }
      24. if (mouse_x > x1+40) && (mouse_x < x1+73) && (mouse_y > y1+60) && (mouse_y < y1+93)
      25. {
      26. scr_inventory_click(4)
      27. }
      28. if (mouse_x > x1+76) && (mouse_x < x1+109) && (mouse_y > y1+60) && (mouse_y < y1+93)
      29. {
      30. scr_inventory_click(5)
      31. }
      32. //Row 3
      33. if (mouse_x > x1+4) && (mouse_x < x1+37) && (mouse_y > y1+96) && (mouse_y < y1+129)
      34. {
      35. scr_inventory_click(6)
      36. }
      37. if (mouse_x > x1+40) && (mouse_x < x1+73) && (mouse_y > y1+96) && (mouse_y < y1+129)
      38. {
      39. scr_inventory_click(7)
      40. }
      41. if (mouse_x > x1+76) && (mouse_x < x1+109) && (mouse_y > y1+96) && (mouse_y < y1+129)
      42. {
      43. scr_inventory_click(8)
      44. }
      Alles anzeigen


      scr_inventory_click:
      Spoiler anzeigen

      GML-Quellcode

      1. //scr_inventory_click//
      2. slot1 = argument0 // Slot funktion also welcher slot es sein soll. Wurde oben bereits gesagt/gezeigt.
      3. if (obj_controler.slot[slot1] == spr_inv_apple)
      4. {
      5. //hier kommt rein was passieren soll wenn man draufklickt!
      6. show_message("Du hast einen Apfel gegessen.") // normale MessageBox
      7. obj_controler.slot[slot1] = spr_item_nothing
      8. exit//wiedermal beenden des Scriptes.
      9. }


      scr_inventory_add:
      Spoiler anzeigen

      GML-Quellcode

      1. //scr_inventory_add//
      2. //Dieser Script dient dazu ein Item zum Inventar hinzu zu fügen!//
      3. //Man kann denken er müsste extrem lang sein ist er aber nicht :)
      4. sprite = argument0//welcher sprite gezeichnet werden soll
      5. for (i=0;i<8;i+=1)//checken ob freier Platz ist
      6. {
      7. if obj_controler.slot[i] = spr_item_nothing//wenn freier Platz ist dann...
      8. {
      9. obj_controler.slot[i] = sprite //wird das hier übernommen
      10. instance_destroy() //und das objekt wird zerstört.
      11. exit
      12. }
      13. }
      Alles anzeigen

      Es ist doch garnicht so schwer doch manche hatten damit Probleme.

      So endlich sind wir fertig mit den Scripts!
      Nun müssen wir nurnoch das obj_controler fertig machen.
      Dazu fügen wir ein Step-Event in das Objekt hinen und schreiben in einen Code:
      Spoiler anzeigen

      GML-Quellcode

      1. if (keyboard_check_pressed(ord("E"))) // Wenn man E drückt. ( ord("E")) gilt für buchstaben für pfeiltasten wäre das einfach nur vk_left oder sowas).
      2. {
      3. if show = false //wenn das inventar unsichtbar ist
      4. {
      5. show = true // lassen wir es zeigen
      6. }
      7. else
      8. {
      9. show = false //oder aber , wenn es da ist lassen wir es verschwinden!
      10. }
      11. }
      Alles anzeigen

      Es fehlen nurnoch zwei Events bis wir mit dem Objekt fertig sind!
      Also erstellen wir ein Global Left Press event und packen dort hinein:
      Spoiler anzeigen

      GML-Quellcode

      1. if show == true // wenn das Inventar sichtbar ist
      2. {
      3. scr_inventory_move(); // gucken ob der cursor irgendwo in einem der slots ist wenn ja dann lassen wir die gewählte funktionlaufen.
      4. }


      Und noch ein Draw Event:
      Spoiler anzeigen

      GML-Quellcode

      1. scr_inventory_draw(show) //Zeichnet das Inventar.


      So, dass war es auch schon fast doch nunja ein Inventar bringt nicht viel ohne Items nicht wahr?
      also erstellen wir ein Objekt und nennen es obj_item_apple

      da machen wir es ganz einfach mit einem Mouse Left Button Pressed Event
      Spoiler anzeigen

      GML-Quellcode

      1. scr_inventory_add(sprite_index) //packen wir das zum Inventar hinzu!


      So das wars nun müssen wir nurnoch einen raum erstellen und dies hinein packen.

      Ich hoffe das euch mein Tutorial gefallen hat, ich währe sehr glücklich über ein Feedback.

      Ich hänge noch die fertige Datei dazu.

      Mit freundlichen Grüßen
      SirPolygon
      Dateien
      • Inventar.rar

        (13,12 kB, 331 mal heruntergeladen, zuletzt: )
    • ERROR in
      action number 1
      of Mouse Event for Glob Left Pressed
      for object obj_controler:

      In script scr_inventory_move:
      In script scr_inventory_click:
      Error in code at line 4:
      if (obj_client.slot[slot1] == spr_inv_apple)
      ^
      at position 6: Unknown variable obj_client


      Beim versuch ein Gegenstand zu bewegen, im Beispiel.
      Btw, im create event könntest du dir etwas zeit Sparen.

      GML-Quellcode

      1. for (i = 0; i < slots; i+=1) {
      2. slot[i] = spr_item_nothing;
      3. }
      :saint:
    • Benutzer online 1

      1 Besucher