Problem beim erstellen von simple effects mit Variablen

  • GM 7

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

  • Problem beim erstellen von simple effects mit Variablen

    Ich habe folgendes Problem:
    Ich möchte ein kleines Programm machen, welches die eingebauten simple effects in einzelbildern abspeichert.
    Um etwas genauer zu sein:
    Ich habe einen raum erstellt, der objecte mit verschiedenen Namen enthält: Feuerwerk, Ring, Explosion etc. Je nachdem welches Object der Benutzer anklickt, speichere ich in der Variable 'global.type' z.B. 'ef_firework'.
    Dann leite ich in den nächsten Raum weiter, indem Objecte mit Quadraten verschiedener Farben zu sehen sind. Je nachdem welches Object der Benutzer anklickt, speichere ich in der Variable 'global.mycolor' z.B. 'c_red'.
    Dann leite ich in den Raum 'generate' weiter. Dort ist ein Object 'generate'. Im Create Event erstelle habe ich ein 'execute a peace of code':

    {
    picture = string("picture_");
    str_end = string(".bmp");
    count = 0;
    str_vor = string("output/");
    effect_create_above(global.type,room_width/2,room_height/2,1,global.mycolor);

    }

    Im Step Event habe ich das hier:

    {
    str_count = string(count);
    filename = string(str_vor+picture+str_count+str_end);
    screen_save(filename);
    count += 1;

    }

    Außerdem habe ich im Create Event einen Alarm gestarten (30 Steps), der Das Spiel neu starten lässt (um die Aufnahme zu beenden).
    Ich habe die Geschwindigkeit des Raumes von 30 auf 10 heruntergesetzt, um nicht zu viele Bilder zu bekommen.
    Im Grunde sollte das Programm doch in jedem Step einen Snapshot machen. Das tut es auch.
    ==> ABER <== Der Effect wird nicht generiert. Ich habe nur ein schwarzes Bild.

    Könnt ihr mir vielleicht sagen, wo mein Fehler ist?
    Ich hänge euch die gesamte Datei gezipt an. Im Raum Explosion mache ich das Ganze mit der Drag & Drop Funktion, und es funktioniert. Aber mit der Drag&Drop Funktion kann ich keine Variablen verwenden.

    Vielen Dank im Vorraus.

    Anhang: explosion generator.zip

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

  • Klick mal im Menü "Scripts" auf "Check Resource Names", das spuckt nämlich folgendes aus:

    Spoiler anzeigen
    Sprite name "explosion" is equal to an object name.
    Sprite name "explosion" is equal to a room name.
    Sprite name "red" is equal to an object name.
    Sprite name "green" is equal to an object name.
    Sprite name "yellow" is equal to an object name.
    Sprite name "blue" is equal to an object name.
    Sprite name "purple" is equal to an object name.
    Sprite name "star2" is equal to an object name.
    Sprite name "orange" is equal to an object name.
    Object name "explosion" is equal to a sprite name.
    Object name "explosion" is equal to a room name.
    Object name "red" is equal to a sprite name.
    Object name "green" is equal to a sprite name.
    Object name "yellow" is equal to a sprite name.
    Object name "blue" is equal to a sprite name.
    Object name "purple" is equal to a sprite name.
    Object name "star2" is equal to a sprite name.
    Object name "generate" is equal to a room name.
    Object name "orange" is equal to a sprite name.
    Room name "explosion" is equal to a sprite name.
    Room name "explosion" is equal to an object name.
    Room name "generate" is equal to an object name.


    Der GM kann also nicht wissen, auf welche Ressource er zugreifen soll, weil mehrere Namen derselben doppelt vorkommen.
    Bewährter Trick:
    Vor alle Spritenamen spr_ setzen, vor die Objekte obj_, vor die Sounds snd_, vor die Scripte scr_ und so weiter. Macht das ganze auch gleich viel übersichtlicher.
    Ich weiß zwar nicht, ob dein Problem damit zusammenhing (habs net ausprobiert) aber könnte gut sein, dass das entweder der Grund für dein aktuelles Problem war oder ein neues verursachen wird, sobald das hier behoben ist :P
  • Danke für den Tipp! Hab das früher gemacht, hab aber nicht bemerkt, dass dadurch Fehler entstehen, und hab es seither aus Faulheit weggelassen.
    Leider funktioniert das Programm trotzdem nicht. Das Problem ist, dass das Programm nicht einmal eine Fehlermeldung ausgiebt.
    Da fällt mir noch etwas ein. Ist es evt. möglich den screenshot auch als .gif oder .jpg zu machen?

    Danke nochmals für die schnelle Antwort! :thumbsup:
  • Wenn du global.type den Effekttyp vorher zugewiesen hast, sollte es keine Probleme geben.
    So etwa:

    GML-Quellcode

    1. global.type=//Effekttyp hier


    Und nein, global. ist nicht nur beim Definieren wichtig. Wenn du eine Variable mit global. davor definierst, musst du auch jedes Mal, wenn du auf diese Variable zugreifen willst global. davorschreiben. Anders verhält es sich mit globalvar, aber das liest du am besten in der Hilfe nach, die erklärt's schön ausführlich :)
    Zurück zu deinem Problem: Ich werd mir das ganze morgen mal ansehen, wenn ich mich wieder konzentrieren kann. (Obwohl bis dahin sicher wieder jemand schneller war als ich :pinch: )
  • Ja danke! Ich sollte auch schlafen gehen (muss morgen arbeiten)
    Noch kurz dazu: ich habs so gemacht

    GML-Quellcode

    1. global.type = string(ef_explosion)


    Weil ich muss es ja als string haben, damit ich es für den string filename mit anderen strings zusammensetzen kann. ^^
  • Da ef_explosion und alle anderen ef_'s real Konstanten sind, kannst du bei der Funktion nicht nen String übergeben. Da solltest du den noch wieder zurück in einen real casten (mit der Funktion real)

    GML-Quellcode

    1. effect_create_above(real(global.type),room_width/2,room_height/2,1,global.mycolor);


    Voraussetzung dafür ist natürlich, dass du da keine anderen Zeichen, außer die Zahlen drin hast.
    Ich hoffe ich habe das jetzt richtig verstanden...

    mfg Critical
  • Mit real-Konstanten meinst du reele Zahlen?
    Ich weiß net wie das funktionieren soll. Kannst du mir konkret sagen, wie ich die Name z.B. ändern soll.
    Und wo dürfen keine anderen Zeichen als Zahlen sein? Im Namen des Strings, der in eine Real-Konstante gecastet werden soll? ?(
    Danke trotzdem für die Antwort :thumbup:

    Edit1:
    Als ich den Code so eingegeben hab wie du, also mit dem 'real(global.type)' hat er mir folgende Fehlermeldung ausgespuckt:

    ___________________________________________
    ERROR in
    action number 1
    of Create Event
    for object obj_generate:

    Error in function real().


    Also wo darf ich jetzt nur Zahlen benutzen?
  • aber wie sieht der string aus?

    ok, ersetze das effect_create mit:

    GML-Quellcode

    1. execute_string("effect_create_above("+global.type+",room_width/2,room_height/2,1,"+global.mycolor+");")


    übrigens kannst du die abfolge so nicht speichern, es wird lediglich das letzte aufgenomme bild gespeichert, bzw mehrere dateien erzeugt.
    "das war meine letzte flamewar PM an dich ."

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

  • Danke! Jetzt funkts endlich!
    übrigens kannst du die abfolge so nicht speichern, es wird lediglich das letzte aufgenomme bild gespeichert, bzw mehrere dateien erzeugt.
    Ja danke ich weiß. Es war die Absicht, so eine Animation in Einzelbildern abzuspeichern dafür hab ich ja auch (siehe oben) ein Stück Code geschreiben, welches jedem File einen neuen Namen gibt.

    Danke nochmal für eure Hilfe! :thumbsup: