ein "drag&drop" shop system erstellen - mit gml

  • GM 8

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

  • ein "drag&drop" shop system erstellen - mit gml

    huhu, ich mal wieder.

    mein ziel ist es nen "drag&drop" shop zu basteln. der hintergrund dafür sieht so aus:



    jetzt sollen links icons sein, die die jeweiligen zu kaufenden objekte angeben. denke da muss ich dann ja auch direkt instancen nehmen.
    ziel soll sein dass man sich so ein objekt mit der maus nimmt und dann rechts in die passenden kästchen reinziehen kann. eine global.geld variable habsch schon, und die funzt soweit auch.
    jetzt meine fragen :
    1. gibts dazu schon irgendwo ein vernünftiges tutorial? hab immo nur einfache shop tuts gefunden die nix brachten oder bei youtube kam "dieses video ist in deinem land leider nicht erreichbar" doller datenschutz...
    2. wenn 1.= false =P könnt ihr mir vllt paar denkanstösse geben wie sowas zu realisieren ist?



    mfg
  • Tutorials für so spezialisierte Dinge gibt es selten. Ich zumidnest kenne keins.

    Aber denke mal wir können mit ein paar Denkanstößen dienen:
    Am besten erstellst du für jedes item im Shop ein Objekt dass du dann im Raumeditor an die richtige Stelle in das Gitter machst.
    Diese Objekte kannst du dann mit Hilfe der maus events an der Stelle der Maus (mouse_x und mouse_y) schweben lassen.
    Wichtig ist dann noch das mouse release event. Dort musst du nur überprüfen ob der point_distance zu einem möglichen zielfeld zum Beispiel kleiner als 30 ist. Ist dies der Fall, springt das item sofort dahin und es wird Geld abgezogen da das Item gekauft wurde. Ist der Abstand größer, sollte das Objekt zurück zu xstart und ystart springen..

    Hoffe das hilft dir =)

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)

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

  • ICh würde für alle Items nur ein Objekt erstellen und dann Instanzen verwenden. Durch Variablen lassen sich dann die jeweiligen eigenschaften des jehweiligen Item definieren.

    Zum Beispiel:

    obj_Item
    und alls Variable zum Beispiel ID
    und das ganze mit einem Switch abfragen und definieren:

    GML-Quellcode

    1. switch(ID)
    2. {
    3. case 1: sprite_index = spApple; break;
    4. case 2: money = 30; break;
    5. //etc.
    6. }


    Hoffe das kann dir vll auch helfen
  • So. Nach einen Versuch hier alles mit der Hand zu schreiben, ich jedoch dann die Rücktaste gedrückt habe und somit alles weg war, hab ich dir ein Example gebastellt wie du dein Shop-System aufbauen kannst. Ich habe einmal ein Inventory (Das eig. mit einen Shop gut zu vergleichen ist) gemacht. Man hat items vertauschen, verschieben, stacken können. Wenn es dir helfen würde würde ich es dir auch geben, jedoch ist es aber recht kompliziert gewesen (soweit ich mich noch erinnern konnte).
    Also das Example das ich dir geben wollte, zeigt dir wie du den Shop drawen kannst, und eine gute Struktur wie du es angehen solltest (meiner Meinung nach ;) )
    Falls du etwas nicht verstehst steh ich für Fragen gerne offen.

    MfG Rodrog
    Dateien
    • shop.rar

      (11,11 kB, 152 mal heruntergeladen, zuletzt: )
    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.
  • ui danke für eure antworten ...denkanastösse scriptschnipsel und exemple xD scheint nen interessantes thema zu sein xD war gestern dann doch noch feiern, ud hab noch nix gemacht. setzte mich jetzt ran und schaue mal wie ich es realisiert bekomme. feedback gibts dann nachher. nomma dickes thx an euch...
  • so ich wieder,

    habe jetzt nen relativ gut gehendes shopsystem zusammengeschustert. das geht in etwa so:

    für jeden verkaufbaren gegenstand ein objekt gebaut mit nem sprite mit 2 images /nicht gekauft-gekauft
    nen objekt gebaut für die hauptwaffe. dazu nen sprite gemacht mit den images der hauptwaffen

    wenn man ein "item" anklickt fragt ne if schleife ab ob das schon gekauft/genug geld etz ist dann kommt noch ne ja/nein abfrage ob man es wirklich haben will und wenn da ja kommt dann wird global.geld-global.preis gemacht und das objekt hauptwaffe wechselt das image auf die passende waffe.

    das funzt auch ganz gut.

    jetzt frage ich im "level" die images des hauptwaffe objekt ab und dazupassend soll dann das jeweilige waffen objekt creiert werden. dies tut es auch.

    mein problem daran ist dass man iwie nicht mehr "schiessen" kann, wenn ich "space" gedrückt hatte schoss die waffe immer in ner gewissen schussfrequenz. nun schiesst sie 1 schuss und wiederholt die frequenz nicht.

    kann mir vllt jemand sagen woran das liegen könnte.


    mfg
  • Ohne ein Stückchen Code kann dir sicher niemand helfen ;) Du gehst auch nicht in die Werkstatt und sagst: "Mein Auto fährt nicht mehr. Was könnte sein?"

    MfG Rodrog
    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.
  • jop sry , bekommste ;)

    habe nen objekt "shop" erstellt wo alle instanzen für den shop erstellt werden:

    Spoiler anzeigen

    GML-Quellcode

    1. //--inventar-----------------------------
    2. instance_create(297,293,oiHauptwaffe)
    3. //--shopitems--Hauptwaffen---------------
    4. instance_create(x+23,y+100,iProjektil_1)
    5. iProjektil_1.image_index=0
    6. iProjektil_1.image_speed=0
    7. ;
    8. ...
    Alles anzeigen


    dann den jeweiligen instanzen funktionen zugewiesen. wenn alle if abfragen passen dann kommt das da:

    Spoiler anzeigen

    GML-Quellcode

    1. {
    2. oiHauptwaffe.sprite_index= sHauptwaffe
    3. oiHauptwaffe.image_index = 0
    4. image_index = 1
    5. global.geld-=global.preis
    6. global.maingun = 1
    7. }
    Alles anzeigen


    wenn ich nun in den nächsten raum wechsel dann fragt mein raumcontrol objekt das global.maingun = 1 ab und creiert dementsprechend die waffe die zu 1 passt. macht der auch, nur kann diese nimmer ballern.

    die waffen sind vonner funktion so aufgebaut:

    Spoiler anzeigen
    create:

    GML-Quellcode

    1. colddown = 0 //Abkühl Variabel

    end step:

    GML-Quellcode

    1. x = oShip.x+29;
    2. y = oShip.y+6;
    3. image_speed=0.5;

    und event "space":

    GML-Quellcode

    1. colddown -= 1 //Waffe wird "abgekühlt"
    2. {
    3. if colddown <= 0 //wenn die waffe abgekühlt ist dann darf man schießen
    4. {
    5. inst=instance_create(x+15,y,oProjektilAmmo);
    6. inst.direction=0;
    7. inst.speed=5;
    8. sprite_index=sGunProjektil_0;
    9. }
    10. colddown = 20 // Das muss zum schluss in der klammer rein!! Je nachdem wie hoch es ist, desto länger dauert es bis man wieder schießen kann.
    11. }
    Alles anzeigen

    das "colddown" script habsch hier iwo mal im forum gefunden, funktionierte auch...vorher =P

    mfg
  • setz mal das colddown über die eine klammer.
    Sprich:

    GML-Quellcode

    1. colddown -= 1 //Waffe wird "abgekühlt"
    2. {
    3. if colddown <= 0 //wenn die waffe abgekühlt ist dann darf man schießen
    4. {
    5. inst=instance_create(x+15,y,oProjektilAmmo);
    6. inst.direction=0;
    7. inst.speed=5;
    8. sprite_index=sGunProjektil_0;
    9. colddown = 20 // Das muss zum schluss in der klammer rein!! Je nachdem wie hoch es ist, desto länger dauert es bis man wieder schießen kann.
    10. }
    11. }
    Alles anzeigen

    Aber wo fragst du ab, das man schießen darf? Fehlt da nicht iwo ein keyboard_check oder so? So wird durchgehend geschossen.

    MfG Rodrog
    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.
  • Hier die Erklärung warum das in die Klammer gehöhrt:

    GML-Quellcode

    1. //zuerst verringerst du deinen Timer um 1
    2. colddown -= 1;
    3. //Da du jetzt überprüfst ob die Maschine abgekühlt ist wird der Code zwische den geschwungen Klammern ausgeführt
    4. if colddown < 0
    5. {
    6. //Code
    7. }
    8. //Jetzt setzt du aber deinen Timer wieder auf 20
    9. colddown = 20;
    10. /*das heißt das die Variable colddown immer auf 20 ist, bzw. zwischen den Code 19*/
    Alles anzeigen
    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.