Mehrere Scores in einem Raum!?

  • GM 8

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

  • Mehrere Scores in einem Raum!?

    Hallo Community!

    Nicht nur hier im Forum, sondern auch im Game Maker Studio bin ich absoluter Neuling, also hört ihr evtl. öfters mal von mir :D
    Aktuell bin ich dabei Stück um Stück die Tutorials durchzugehen und parallel dazu mein erstes sehr gründlich geplantes Game zu machen.

    Dabei stoße ich jedoch auf folgendes Problem:
    In meinem Spiel werden verschiedene Rohstoffe produziert, die sich pro Minute um eine bestimmte Anzahl erhöhen. Dazu habe ich jeweils einen Alarm reingesetzt, der dann den Score erhöht, sodass ich z.B. pro Minute 120 Rohstoffe dazubekomme (also wie ein Counter sozusagen).
    Nun ist es aber so, dass es verschiedene Rohstoffarten sind und ich also seperate Scores benötige, die unabhängig voneinander laufen.

    Aktuell laufen meine drei Scores eben alle gleich egal was ich einstelle. Bitte sagt mir, dass es da eine Möglichkeit gibt :S


    Gruß
    papanini
  • du kannst entweder mit Arrays arbeiten das würde so gehen:

    GML-Quellcode

    1. Rohstoff[0] = 0
    2. Rohstoff[1] = 0
    3. Rohstoff[2] = 0

    da kannst du das dann so ähnlich wie als wenn ich Rohstoff0 = 0 machen würde
    aber so kann man auch eine variable als zahl setzten:
    Rohstoff[zahl] = 0
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Hallo und willkommen im Forum :)

    Der wert "score" ist ein feste Variable in Game Maker, mit der man arbeiten kann.
    Wenn du wie du sagst 3 Rohstoffe hast, kommst du nicht daran vorbei selbst Variablen zu erstellen.

    Ein kleines Beispiel. Da ich denke das du die Rohstoffe im ganzen Spiel brauchst, würde ich globale Variablen erstellen.
    Global heisst, das du auf sie im ganzen Spiel zugreifen kannst, wenn du sie am Anfang des Spiels festlegst.

    Erstelle ein neues Objekt. Nenne es "obj_game_start" und füge dort im Global Event folgenden Code ein:

    GML-Quellcode

    1. globalvar RohstoffHolz;
    2. globalvar RohstoffEisen;
    3. globalvar RohstoffStein;
    4. RohstoffHolz = 0;
    5. RohstoffEisen = 0;
    6. RohstoffStein = 0;


    Das Objekt setzt du nun in das erste Level ein. Mach es unsichtbar und es braucht auch keinen Sprite.
    Das ganze bewirkt nun das du 3 Werte hast auf die du im ganzen Spiel zugreifen kannst.

    Sagen wir dein Player läuft über einen Holzstapel füge im Collisionsevent mit deinem Player und dem Holz folgenden Code ein:

    GML-Quellcode

    1. global.RohstoffHolz += 100


    Fertig ist das ganze im Großen und ganzen. Danach sollte der Holzstapel natürlich verschwinden (Instance_destoy()).
    Du kannst dir die 3 Werte anzeigen lassen wenn du im Draw Event des Players folgendes schreibst:

    GML-Quellcode

    1. draw_text(10, 10, global.RohstoffHolz);


    Dann zeigt er dir den Wert von RohstoffHolz an bei der Position X=10 und y=10.

    Viel spaß beim experimentieren :)
  • Cool, vielen Dank an euch zwei für den Tipp und die nette Willkommensgeste :D

    Ich werde mich gleich morgen ransetzen und es mal ausprobieren und natürlich berichten ;)

    Gibt es da eine sinnvolle Seite für Anfänger wo die Code Geschichten etwas erklärt werden? Oder Videos? Da muss ich zugeben habe ich noch keinen Plan von^^

    Du hast es echt super erklärt bekomme ich bestimmt auch gut hin aber für die Zukunft und für schwerere Geschichten ;)
  • Gerne Doch.

    Es gibt unter anderem hier viele gute brauchbare Tutorials. Oder einfach mal in Youtube suchen nach Game Maker Tutorial :) Wenn du englisch kannst ist das vom Vorteil.
    Beim Tutorials schauen / lesen wie auch beim Programmieren selbst.

    Viel Erfolg :)
  • Ich glaube da du Anfänger bist und wohl auch sonst nichts mit anderen Programmiersprachen am Hut hast oder bsi jetz hattest ist die Idee mit dem Array vielleicht noch etwas zu fortgeschritten für dich (es sei denn du fuchst dich da rein^^)

    für den Anfang wird es reichen wenn du verstehst, das score nur eine Variable ist die von haus aus iM GM eingebaut ist und du einfach deine eigenen Variablen deklarieren kannst

    GML-Quellcode

    1. //variablen die nur in dem einen Objekt gelten
    2. holz = 0; //erstellt eine Variable holz mit Startwert 0
    3. //oder
    4. var holz;
    5. holz = 0;//dasselbe nur das der wert erst später angegeben wird
    6. //variabeln auf die du auch von anderen Objekten aus zugreifen kannst
    7. global.holz = 0;
    8. //oder
    9. globalvar holz;
    10. holz = 0;
    Alles anzeigen


    also kann die Variable mit namen holz entweder nur lokal in deinem Objekt (zB Holzfäller) bestehen und alle soundsoviel zeiteinheiten erhöht werden
    oder global erstellt worden sein und von jedem anderen Objekt (zB holz_anzeige) benutzt werden.
    Score zB ist eine globale Variable ohne das sie global.score heißen muss.

    Mein Tipp: erstelle für jede Ressource eine globale Variable mit der notation global.name damit du eine bessere Übersicht behältst welche variable global und welche lokal ist.

    EDIT: ach.. zu lang zum tippen gebraucht XD

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Und nun noch den Timer ;)

    So habe eure Anleitungen befolgt und es funktioniert tatsächlich perfekt, Vielen Dank :D

    Meine Frage nun noch: Gibt es da eine geschicktere Möglichkeit mit dem Zeitplaner als es ungenau über den Alarm zu machen? Evtl auch ein Code?^^

    Mein Ziel ist es nämlich, dass z.B. pro Minute 100 Holz automatisch dazukommen (wenn möglich so dass es sich Sekundenmäßig erhöht, aber dennoch so dass es eben genau die 100 pro Minute sind). Außerdem - und jetzt kommt das kniffelige - soll der Holzfäller auch aufstufbar sein, sodass ich z.B. durch Ausbau des Holzfällers ein Kommando geben kann, dass jetzt nicht mehr 100, sondern z.B. 150 Holz pro Minute hergestellt werden.

    Danke schonmal für die Tipps :D
  • also den normalen timer zu machen solltest du das Event alarm0 benutzen
    und im create

    GML-Quellcode

    1. alarm[0]=room_speed*60

    und in alarm0 diesen code einfügen

    GML-Quellcode

    1. Rohstoff[0] += 100
    2. //oder
    3. Holz += 100
    4. //oder wie du es vorziehst
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Mhm... da mach ich wohl was falsch bekomm dann immer nach einer Minute ne Fatal Error Message.
    Also ich habe jetzt in der obj_game_start folgenden Create Code:

    GML-Quellcode

    1. global.holz = 100;
    2. global.lehm = 100;
    3. global.eisen = 100;
    4. global.punkte = 0;
    5. alarm[0]=room_speed*60


    Und dann habe ich ein Alarm0 Event:

    GML-Quellcode

    1. global.Holz += 100


    Was ist falsch? :vogel:
  • oh und du musst noch im alarm das schreiben:

    GML-Quellcode

    1. alarm[0]=room_speed*60

    hab ich vergessen
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • room_speed*60 wären dann 60 Sekunden... also Eine Minute :)

    room_speed entspricht einer Sekunde...
    room_speed*2 entsprichtz zwei sekunden...
    room_speed*3 entspricht drei sekunden...

    etc...

    Ausserdem setzt du mit "global.holz = 100;" jedesmal den Wert auf 100.
    Du addierst aber nicht 100 zum Wert dazu. Das geht mit "global.holz +=100".
  • @ Atomicmaster
    das ist das create :D

    @papanini
    und wie siehts bei dir im alarm aus?
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • husi012 schrieb:

    oh und du musst noch im alarm das schreiben:

    GML-Quellcode

    1. alarm[0]=room_speed*60

    hab ich vergessen


    hast du immer noch vergessen
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe