2 Problemchen (Global Game Settings und "maximalanzahl instances")

  • GM 8

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

  • 2 Problemchen (Global Game Settings und "maximalanzahl instances")

    Hallo Liebe Deutschsprachige Community!

    Zuerst: Ich bin frischling im Umgang mit dem Gamemaker. Ich benutze zum Großteil Drag and Drop (zeilenweise auch mal Code (benutze zum beispiel EasyLighting)) da mir nicht immer alles in GML einfällt...

    Nun habe ich mich an ein großes Projekt gewagt (für mich möglicherweise zu groß...)

    Eine Frage die sich mir ganz schnell auftat: Kann ich die Global Game Settings ingame Ändern? um genau zu sein: Ich würde gerne in dem Optionsmenü meines Spiels das Scaling änderbar machen (wer mag soll mit 100% spielen, wer mag auch letterbox-mäßig oder so...)?

    Der teil der nun folgt wurde von mir ca 20 mal geschrieben und gelöscht weil die Formulierung blödsinn war. Entschuldigt also bitte meine leicht verwirrt klingende Ausdrucksweise und die Tatsache dass ich das Problem GENAU an meiner Situation erkläre und nicht allgemeiner...

    Das zweite Problem:
    Ich möchte gerne in ein Objekt einen Zähler einbauen. Dieser Zähler soll erhöht werden wenn eine weitere Instanz erschaffen wird. Dann möchte ich im Step-event einfügen, dass wenn dieser Zähler 4 erreicht die Instanz gelöscht wird.
    Im Endeffekt will ich einfach maximal 4 Instanzen desselben objekts auf dem Schirm haben. Wenn eine vierte Instanz erschaffen wird soll die zuerst erschaffene gelöscht werden.

    Ich schäme mich ein wenig dafür diese Formulierung zu posten, aber ich bekomme sie leider nicht besser hin.

    Ich würde mich über Antworten SEHR freuen....
    Gruß
    Waki
  • Hallo Wakizashi89 und willkommen im Forum!

    Zu deinen Fragen:
    Eine Frage die sich mir ganz schnell auftat: Kann ich die Global Game
    Settings ingame Ändern? um genau zu sein: Ich würde gerne in dem
    Optionsmenü meines Spiels das Scaling änderbar machen (wer mag soll mit
    100% spielen, wer mag auch letterbox-mäßig oder so...)?
    Viele der Global Game Settings kann man Ingame ändern, aber nicht alle.

    Meinst du mit "Scaling" das Skalieren des Fensters?
    Wenn ja: Mit window_set_sizeable geht das.
    Schau dir generell mal die Window- und Displayfunktionen an, da findest du noch weitere Einstellungsmöglichkeiten von den Global-Game-Settings.

    Das zweite Problem:


    Ich möchte gerne in ein Objekt einen Zähler einbauen. Dieser Zähler soll
    erhöht werden wenn eine weitere Instanz erschaffen wird. Dann möchte
    ich im Step-event einfügen, dass wenn dieser Zähler 4 erreicht die
    Instanz gelöscht wird.


    Im Endeffekt will ich einfach maximal 4 Instanzen desselben objekts auf
    dem Schirm haben. Wenn eine vierte Instanz erschaffen wird soll die
    zuerst erschaffene gelöscht werden.

    Dafür kannst du die Variable instance_count verwenden.
    Um die erste Instanz zu löschen könntest du die Instanz-Id von der ersten Instanz "zwischenspeichern":
    Dazu erstelle die globale Variable "ersteinstanz" im Create-Event eines separaten Controller-Objektes:

    GML-Quellcode

    1. global.ersteinstanz = 0


    Und im Step-Event deines Objektes:

    GML-Quellcode

    1. if instance_count = 1
    2. global.ersteinstanz = id
    3. if instance_count = 4
    4. {
    5. with (global.ersteinstanz)
    6. instance_delete()
    7. }

    Ich schäme mich ein wenig dafür diese Formulierung zu posten, aber ich bekomme sie leider nicht besser hin.
    Ich finde du hast das eigentlich recht gut beschrieben. :)

    Hoffe ich konnte dir weiterhelfen, habe den Code noch nicht getestet.

    MfG,
    RLP

    /Edit: Etwas übersichtlicher gemacht

    /Edit2: Entschuldige, was ich geschrieben habe war Blödsinn, ist nun korrigiert.

    /Edit3 und 4: Wieder Sachen ausgebessert :/

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von RLP ()

  • ersteinstanz = 0
    if instance_count = 1
    ersteinstanz = id
    if instance_count = 4

    RLP schrieb:

    Hoffe ich konnte dir weiterhelfen, habe den Code noch nicht getestet.
    Ich fürchte diese Lösung ist für mich nicht die richtige: Das soll sich bis ins unendliche wiederholen, sodass immer das "älteste" Objekt beim erstellen eines neuen gelöscht wird. Des weiteren besteht mein "Objekt" aus mehreren Instanzen desselben Objekts :wacko: . ich habe also vorgehabt eine Variable im create event zu erstellen var_counter. Diese auf 4 setzen. Dann wann immer ein neues objekt erstellt wird soll bei allen bestehenden Objekten var_counter um eins verringert werden. dabei stellte ich fest dass obj_objekt.var_counter alle instanzen des objekts betrifft. (sprich: beim erstellen wes 4. objekts werden ALLE gelöscht, nicht das älteste.)

    ich hoffe die Antwort war nun richtig und ist nicht auf der falschen Aufnahme deiner Lösung zurückzuführen.

    (falls mein problem noch nicht genau klar ist ("Des weiteren besteht mein "Objekt" aus mehreren Instanzen desselben Objekts :wacko: ") kann ich auch mein spiel irgendwie uploaden und das anhand dessen erklären....
  • Ich habe da leider einige Edits gemacht, überprüfe bitte nochmal ob es geht.
    Es kann aber auch sein, dass ich es einfach falsch verstanden habe, ich bringe gerne was durcheinander bei solchen "Aufgaben".^^

    Ansonsten, wäre es es wohl wirklich sinnvoller wenn du die Datei hochlädtst.
    Suche dir am besten einen freien Webhoster wie Mediafire und gib den Link dann hier ein, dann schaue ich es mir gleich an.
  • O_O wow!

    danke schonmal! Äußerst nett.
    Jetzt muss ich erstal mein spiel erklären... Platformer. steuerung mit WASD. mit dem mausrad kann man durch die untere menüleiste (mit zur zeit 3 von 16 einträgen) scrollen. du gehst am besten zu dem grünen "baum". drückst e. der spieler klettert und hat danach 3 grüne steine. wenn in der menüleiste die grünen ausgewählt sind, kann mit linksklick in die mausrichtung geworfen werden (länger klicken für weiteres werfen). die fähigkeit der grünen dinger ist pflanzen von der decke wachsen zu lassen. wenn ein grüner stein in deckennähe ist und mit rechtsklick gezündet wird, wird eine pflanze erstellt. von diesen hängenden pflanzen sollen maximal 3 stück da sein...

    ich fürchte dass mein programmier-wirr-warr keine leichte übersicht bietet...

    hoffentlich ist dann zumindest mein problem verständlcih erklärt!

    Edit: mir fällt gerade auf das ich die vielen stunden die ich darein bis nun investiert hae gerade zum ersten mal jemandem zeige...und dieser jemand auch noch genau guckt was ich wie gemacht habe....witziges gefühl!

    achja, hier der link mediafire.com/?hfgxxmkpu20mtkt

    und nochmals: VIELEN dank für die äußerst schnelle hilfe!

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

  • Ich habe jetzt zwar dieses EasyLightning heruntergeladen und installiert, aber ich bekomme trotzdem die Fehlermeldung "Unknown function or script: lt_shadcreate". Ich habe auch unter Scripts > Show Extension Functions gesehen das die Funktion nicht existiert ...
    Kannst du mir bitte die Version von Easylightning schicken die du verwendest, oder einen entsprechenden Link posten? Danke :)
  • oh entschuldige, an dieses problem habe ich nicht gedacht...
    ich nutze die version 7.02 (die letzte und aktuelle). Die besagte fehlermeldung wundert mich, da ich diese funktion nicht benutz habe (habe keine schatten eingebaut...)
    hast du die extension auch für das spiel geladen...? (also vom rechten fenster ins linke (im menüpunkt extensions) geschoben)?
    habe hier nochmal die fertige exe davon hochgeladen, zur fehlerbeschreibung reicht das ja... nur nicht für die lösung ^^

    mediafire.com/?chay7jtoenyq46v

    Edit: hier dennoch der link zum easy lighting...: gmc.yoyogames.com/index.php?showtopic=405212
  • Ich Dämel habe auch die falsche Extension runtergeladen.^^

    Danke trotzdem für den Link.

    Die Problemstellung hatte ich zwar verstanden, aber mir ist nichts Brauchbares eingefallen, jetzt aber habe ich das Problem gelöst:

    Das Problem war, dass wir immer die kleinste id brauchen um die entsprechende Instanz zu löschen.
    Jedes mal wenn eine Instanz erstellt wird, wird die id hochgezählt. Das kann man schön im Debug-Modus vom Gamemaker beobachten unter Tools > Show Instances.

    Ich habe da einiges herumprobiert, bis ich draufgekommen bin, dass das hier:

    GML-Quellcode

    1. if instance_number(obj_ding) = 4
    2. {
    3. with obj_ding.id
    4. instance_destroy()
    5. }


    genau das ist was du brauchst.

    Nachdem ich mich nicht einarbeiten wollte und versuchen wollte deinen Code zu verstehen (jeder hat da seine eigene Logik) habe ich eine kleine Testanwendung geschrieben. So ist außerdem der Lerneffekt ein bisschen höher.^^

    Testanwendung

    Im Grunde gibt obj_ding.id immer die id der "ältesten" Instanz wieder, da die id´s wie gesagt pro neu erstellte Instanz hinaufgezählt werden. Das ist sehr praktisch und habe ich davor auch noch nicht gewusst. :D In diesem Sinne habe ich auch etwas Wichtiges dazugelernt.

    Zum Spiel: Finde ich ziemlich interessant, vor allem wegen den erstellbaren Pflanzen. Das ist mal etwas was ich noch nicht zuvor in einem Spiel gesehen habe, wenn du das Spiel hier irgendwann vorstellst (was ich hoffe) dann freue ich mich schon auf einige knackige Levels. Auch grafisch finde ich es durchaus gelungen! Nur dass die Spielfigur so klein ist und man dementsprechend nicht so gut sieht im Level stört mich persönlich etwas, auch das Menü könnte besser sein. Aber noch kann man ja nicht viel sagen zum Spiel. :)

    So, dann schließe ich mal mit meinem 100. Post ab und freue mich. :D

    PS: Wenn es dennoch Probleme geben sollte, dann kannst du mich natürlich noch fragen.^^
  • Wow danke! deine Testanwendung funktioniert genau wie gewollt. Nun wird es für mich etwas tricky das einzubauen, da eine Kletterpflanze ja aus bis zu (aber nicht immer...) 9 instanzen des objekts besteht... Also muss ich praktisch sagen dass bei 27 die 9 ältesten gelöscht werden. außer die älteste kletterpflanze besteht nur aus z.b. 7 instanzen...

    Aber danke mit ein wenig herumprobieren schaff ich das denke ich schon!

    Nochmal zum Spiel selber:
    Danke für das größtenteils positive feedback! Zur klinen spieler-sprite sei zu sagen dass ich mir das beabsichtigt so ausgesucht habe...um recht große level erstellen zu können, welche ganz auf den Bildschirm passen. Außerdem ist das durchaus eine sache der Spielathmosphäre: Es wird zum größten teil recht dunkel gehalten (mit den roten steinen können z.b. auch bereits fackeln entzündet werden) und der kleine spieler soll dich in der großen dunklen höhle verloren und desorientiert fühlen... um es etwas überspitzt auszudrücken. Es soll ein Puzzle-platformer werden mit vielen verschiedenen werfbaren steinchen welche alle unterschiedliche Fähigkeiten haben (leider bin ich bei 3 verschiedenen schon an meiner Kreativitätsgrenze angelangt...). Ein bisschen inspiriert von Oddworld, Prince of Persia oder Portal...Stil-technisch eher Limbo oder andere düstere sachen...
    Ich muss gestehen auf das Menü war ich recht stolz, es sah für mich schon fast aus wie ein "echtes Spiel"! nun gut ich werde mich dahingehend noch weiter inspirieren lassen!

    (wirklich nochmal vielen dank, es ist schön mal eine Meinung zu hören wenn man da schon ein paar Stunden investiert hat...)
  • Der Code

    GML-Quellcode

    1. if instance_number(obj_ding) = 4
    2. {
    3. with obj_ding.id
    4. instance_destroy()
    5. }


    ist fast richtig, wenn sich aber die anzahl der Instanzen innerhalb eines Steps auf über 4 erhöht, greift das nicht. Es müsste so heißen:

    GML-Quellcode

    1. while instance_number(obj_ding) > max_instances
    2. {
    3. with obj_ding.id
    4. instance_destroy()
    5. }


    Dann musst du nurnoch entweder im Create Event jedes Objektes, das diesen Code ausführt max_instances auf die gewünschte Größe setzen, oder es direkt im Code durch die maximale Anzahl an Instanzen ersetzen
  • Benutzer online 1

    1 Besucher