Level-UP XP Anleitung Geht nicht

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

  • Level-UP XP Anleitung Geht nicht

    Hallo

    Ich wollte wen ich ein feind Besiege das ich Level 2 werde und man es siet da dachte ich woow schön erklärtes Tutorial aber:

    :headtouch:
    ich habe mir das angeschaut und nachgemacht:

    RPG -- Erfahrung sammeln

    Aber es geht nicht wen ich es genau so mache bekomme ich duzende Crash Info´s







    Das Habe ich bei mein Player eingegeben unter Create Event

    Quellcode

    1. erfahrung += 1;
    (( MUSS ICH BEI: erfahrung ne zahl angeben ?
    150 += 1
    )) ?






    Ich habe mir ein neues obj_Controll erstellt Name: LevelUP_Controll , Im Create Event Habe ich das eingegeben:

    Quellcode

    1. global.exp=0
    2. maxexp=100
    3. level=0




    Danach habe ich das im LEVELUP_Controll im Step-Event eingegeben:

    Quellcode

    1. if global.exp>=maxexp
    2. {
    3. level+=1;
    4. global.exp=0
    5. }


    UND DAS da drunter:

    Quellcode

    1. if level=1
    2. maxexp=200
    3. if level=2
    4. maxexp=350



    Muss es : global.exp oder global.erf Benannt werden ? und muss ich dann maxexp auch in maxerf endern?






    Dann war ich Beim Gegner und habe da das im Kolision mit Schwert dann... da dort mein DestroyEvent drinn liegt. eingegeben.

    Quellcode

    1. global.exp+=20+random(10)
    Mein Game und meine seite: riataliaxeas.npage.de/

    Spoiler anzeigen
    Zeit zurückspulen, Tag-/Nacht-System, Begleiter mit Boni, Shop, Dungeon und Licht-/Schatteneffekte, 3D-Fake-Natur und mehr...Termin: Mitte 2016
    :!:
  • Dir fehlt es doch arg noch an Grundwissen in GML. Alleine durch Code kopieren und bei dir einfügen, kommst du nicht weit und hast keinerlei Erfahrungsgewinn in sachen Programmierung in GML.

    Wenn du den Code schon kopierst, achte auf die Variablen, das sie zu deinen Projekt passen und auch existieren. Sonst hagelt es Fehlermeldungen wie du schon (des öfteren) gemerkt hast. Versuche die Codeschnippsel als Lernübung zu sehen. Den Code zu lesen und versuchen ihn zu verstehen. Erst dann solltest du ihn in dein Projekt einfügen. Von Fehler zu Fehler zu coden ist nicht förderlich.

    In deinem fall ist "erfahrung" eine Variable. Die kannst du verändern. D.h. Nein das muss keine Zahl sein.
    Den Code den du ins Create Event gemacht hast bei deinem Player (erfahrung +=1) bewirkt folgendes:
    Du startest das Level, der Spieler wird geladen (erstellt) dessen Create Event wird aufgerufen, und du addierst 1 zu Erfahrung (wenn du die Variable vorher definiert hast) und das wars.

    Warum sollte es einen erfahrungspunkt geben wenn der Spieler erstellt wird? Das ist glaube ich nicht richtig und von deiner Seite aus sicher auch nicht gewollt.

    Richtiger wäre es in dessen Create Event die "global.exp" Variable zu definieren. Das machst du ganz einfach mit:

    global.exp = 0;

    Nun hast du eine Globale (Spielweite) Variable die exp heisst. Und den Wert 0 hat.

    Nun können andere Objekte darauf zu greifen (da die Variable global / Spielweit definiert wurde) und sie verändern. Wenn du nun einen Gegner zerstörst kannst du mit zb.:

    global.exp += 100

    100 Erfahrungspunkte hinzugeben.

    Das ganze solltest du auf deinen Code leicht anpassen können. Viel Erfolg!
  • Dazu muss man noch erwähnen, dass wenn du das ganze im Create Event deklarierst, dieser Code jedes Mal abgerufen wird, wenn das Objekt erstellt wird, der Raum neu gestartet wird oder du in einen anderen Raum übergehst.

    Beispiel:
    Du hast im Create Event von objPlayer folgendes stehen: global.exp = 0 (zum Einlesen), willst dann in einen anderen Raum bspw. in ein Haus rein, wo das Create-Event vom Spieler wieder neu abgerufen wird und somit wäre der gesamte Fortschritt weg.

    Die Lösung dafür ist ganz einfach. Hierfür kannst du dir mal genauer Room Start / Game Start anschauen oder du verwendest ein Kontroll-Objekt, welchen du den Wert "Persistent" gibst. Das soll heißen, dass dein Objekt in den Räumen unverändert bestehen bleibt. Den Haken dafür findest du bei der Objekt-Erstellung im linken Menü.

    Wenn du das mit dem Einlesen noch nicht ganz verstanden hast, kannst du dir das EVA-Prinzip mal anschauen, das meint die Eingabe, Verarbeitung und Ausgabe. Die Grundstruktur eines jeden Codes, damit solltest du vielleicht einsteigen.
  • in mein obj_Controll event habe ich das ja eingegeben: global.exp = 0;

    und habe das: global.exp += 100 bei mein Gegner ins Destroy Event gemacht.

    __________________
    finde schön das sie mir so ein langen text schreiben und es mir erklären aber das will immer noch nich hinhauen !

    kann man mir nich einfach schreiben wo ich was reinmachen muss?

    Das Globale Controll event:
    Player event:
    Gegner Event:

    verstanden habe ich das obere ja etwas , doch ich kann es mir leichter verständlich machen wen man mir hinschreiben würde wo was reingeschrieben wirt !

    wo soll das rein? global.exp = 0; ins Globale Controll event oder beim Player ins Controll event...
    und wo soll das bitte rein? global.exp += 100
    reichen die 2 sachen? ... und wen nicht was brauche ich sonst noch?
    Mein Game und meine seite: riataliaxeas.npage.de/

    Spoiler anzeigen
    Zeit zurückspulen, Tag-/Nacht-System, Begleiter mit Boni, Shop, Dungeon und Licht-/Schatteneffekte, 3D-Fake-Natur und mehr...Termin: Mitte 2016
    :!:
  • Du hast es im Prinzip schon richtig gemacht, aber ein kleiner Tipp. Änder mal deine EXP-Variable um ;) Das ist nämlich schon als eine Funktion belegt, so kann das natürlich dann auch nicht klappen. Versuch es mal mit global.xp oder global.erfahrung

    Ansonsten hier nochmal die einfache Methode:

    Kontroll-Objekt Create-Event:

    GML-Quellcode

    1. maxlevel = 10; //Maximale Anzahl an Leveln
    2. global.xp = 0; //Deine EXP
    3. global.level = 0; //Dein Level
    4. for (i = 0; i<maxlevel; i+=1) {
    5. global.maxxp[i] = 200+i*100; //Kleine Berechnung für die Max-EXP
    6. }


    Destroy-Event vom Gegner:

    GML-Quellcode

    1. //Damit die Rest-EXP dem neuen Level noch hinzugefügt werden
    2. global.xp+=100;
    3. if global.xp >= global.maxxp[global.level] {
    4. global.xp-=global.maxxp[global.level];
    5. global.level+=1;
    6. }


    Optional mnoch das Draw-Event, für die Ausgabe zum Überprüfen, ob alles funktioniert

    GML-Quellcode

    1. draw_text(x, y, "Level: " + string(global.level) + "#EXP: " + string(global.xp) + " / " + string(global.maxxp[global.level]));


    Edit
    Kleiner Nachtrag zu deiner Frage:
    Muss es : global.exp oder global.erf Benannt werden ? und muss ich dann maxexp auch in maxerf endern?

    Im Endeffekt ist es egal, wie du deine Variablen nennst. Du könntest auch schreiben toastbrot_mit_nutella = 0; und es würde funktionieren. Aber Du musst darauf achten, dass du jetzt nicht bspw. exp, was ja als Funktion gilt nicht als Variable deklarierst, da diese eine ganz andere bedeutung hat. Bei Sachen wie image_index = 0 etc. kannst du das natürlich selbstverständlich machen, allerdings nicht als eigendefinierte Variable. Diese gibt es schon und muss sozusagen zum richtigen zweck angewendet werden.

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

  • :love: verstanden alles jetst und ja es geht super dannnke !!!!!!!
    Mein Game und meine seite: riataliaxeas.npage.de/

    Spoiler anzeigen
    Zeit zurückspulen, Tag-/Nacht-System, Begleiter mit Boni, Shop, Dungeon und Licht-/Schatteneffekte, 3D-Fake-Natur und mehr...Termin: Mitte 2016
    :!: