Verzögerung erwünscht - aber doch net im ganzen Spiel!

  • GM 8

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

  • Verzögerung erwünscht - aber doch net im ganzen Spiel!

    Tja, da bin ich wieder - mit einem neuen Problem: In meinem Spiel soll sich im Hintergrund, für den Spieler sichtbar, schon mal die neue Reihe mit Blöcken aufbauen, die gleich auf dem Spielfeld erscheint. Das geht aber so schnell, daß der Spieler das gar nicht mitbekommt.

    Nun suche ich nach einer "Verzögerungsschleife", die aber nicht das ganze Spielgeschehen einfriert. "Sleep" scheidet daher schon mal aus, obwohl - wenn in den Create-Event der Blöcke gesetzt - der Ergebnis optimal wäre - wenn eben nicht alles andere eingefroren wäre.

    Die Room-Speed kann ich auch nicht verändern, hat auch Auswirkungen auf alles andere. Hab dann mal einen Alarm versucht, auch im Create-Event - aber das Ergebnis ist nicht dasselbe. Entweder ich der Alarm sitzt an falscher Stelle oder ist generell nicht dafür geeignet. Jetzt habe ich keine Idee mehr.

    Was bitte könnte ich machen, daß ich eine Verzögerung im Create-Event der Blöcke auslöse, ohne das andere Spielgeschehen zu verzögern oder gar anzuhalten?

    Danke schon mal im voraus,
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Tice schrieb:

    Ein Alarm würde da doch helfen z.b
    alarm[0]=roomspeed*Sekunden
    Und im alarm[0] event
    könntes du dann die verzögerte aktion ausführen.
    Danke für die Antwort. Genau das hab ich ja probiert, aber das geht nicht. Sowie die Verzögerung nicht im Create-Event stattfindet, werden die Objekte gar nicht erst einzeln angezeigt, bevor der Alarm abgelaufen ist. Das Problem ist auch, daß die ganze Reihe Objekte über eine Schleife gebildet wird. Und ich kann dann "instance_create" nicht einfach aus der Schleife nehmen. Aber ein Alarm in der Schleife bewirkt eben nicht dasselbe. Der Alarm wird zwar runtergezählt, aber die Objekte warten dadurch ja nicht.

    Hat noch jemand eine Idee, wie man das bewerkstelligen könnte?
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Probiere ich aus, wäre eine Idee. Glaube aber net, daß es geht, denn sie sind ja alle "unsichtbar", bis die Reihe erscheint, obwohl visible auf true steht. Aber wie gesagt, kommt auf einen Versuch an.
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Alron schrieb:

    Könntest du ein exemple raufladen?
    Ja, klar, ich häng mal ein Beispiel dran. Die Verzögerung jetzt ist im create-Event des Parents-Objektes (obj_block). Alle 30 Steps kommt eine neue Reihe und diese soll in der ersten X-Zeile dargestellt werden. Leider, wie gesagt, friert dabei das ganze Spiel ein und ich finden keine andere Lösung für "Sleep".
    Archie
    block_test.zip

    PS: Wieso kann man ausgerechnet hier eigentlich keine *.gmk-Dateien hochladen??
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Ersetze deine Schleife durch einen zweiten Alarm. Ich würde das so machen:

    1. Entferne die Sleep-Aktion. Du willst doch nicht, dass das Spiel einfriert.
    2. In obj_ctrl: Im Create Event setzt du Anstatt "alarm0" "alarm1" auf 30. Außerdem initialisiert du noch eine Variable "position", die das i in deiner Schleife ersetzt.
    Das Create Event sollte so aussehen:

    GML-Quellcode

    1. global.rr=round(irandom(4));
    2. global.block=0;
    3. global.reihe=0;
    4. position=0;
    5. alarm[1]=30;

    3. Lege einen neuen Alarm 1 an. Dort steht folgender Code, der im Prinzip das selbe macht, wie die alte Schleife, nur eben verzögert, ohne dabei das Spiel aufzuhalten:

    GML-Quellcode

    1. global.stein=obj_green;
    2. if (position<=room_width)
    3. {
    4. global.rr=round(irandom(4));
    5. if global.rr=4 global.stein=obj_green;
    6. if global.rr=1 global.stein=obj_blue;
    7. if global.rr=2 global.stein=obj_red;
    8. if global.rr=3 global.stein=obj_yellow;
    9. instance_create(position,0,global.stein);
    10. position+=32;
    11. alarm[1]=5;
    12. }
    13. else
    14. {
    15. alarm[0]=30;
    16. position=0;
    17. }
    Alles anzeigen

    4. Zuletzt musst du noch im alarm 0 Event die alte Schleife entfernen und einstellen, dass dort alarm[1] auf 5 gesetzt wird, anstatt alarm[0] auf 30.
    Alarm Event for alarm 0:
    for all obj_block: jump to position (x,y+32)
    for all obj_block: align position to a grid with cells of 32 by 32 pixels
    execute code:

    redraw=true;

    set Alarm 1 to 5
    Einige meiner Spiele:
  • interceptor schrieb:

    Ersetze deine Schleife durch einen zweiten Alarm. Ich würde das so machen:
    Vielen, vielen Dank für die Mühe, die Du Dir gemacht hast!! Ich werde das gleich mal alles in meinem Code umschreiben und hoffe, daß es dann geht. Ich melde mich dann wieder.
    Solche Antworten sind für mich mehr als nur für ein Problem hilfreich, da kann ich das Erlernte abgewandelt doch gleich in anderen Situationen mit einfließen lassen. Also vielen Dank noch mal! :thumbsup:
    Archie

    edit:
    Habs ausgetestet, prima, es läuft! Allerdings muß ich jetzt die beiden Scripte noch anpassen, da stimmts jetzt nicht mehr, ist aber kein Problem. Danke noch mal. :)
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:

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