Screen Shake

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

  • Rein von der Überlegung her würde ich das folgendermaßen anpacken:

    Die Standard-View folgt nicht dem Spieler direkt, sondern einem unsichtbaren Objekt, das sich direkt über diesem befindet. Wenn nun das Bild beben soll, bewegt man einfach dieses Objekt entsprechend hin und her.

    So viel zur Theorie.
    Ich muss aber gestehen, dass ich von der Praxis nicht viel Ahnung habe. Vielleicht gibt es eine bessere Methode oder ich rede einfach nur Unfug...
    GameMaker-Version: 5.0 (die letzte kostenlose ohne Einschränkungen)
    meine Website | mein Diskussionsforum
  • Original von Treml
    Rein von der Überlegung her würde ich das folgendermaßen anpacken:

    Die Standard-View folgt nicht dem Spieler direkt, sondern einem unsichtbaren Objekt, das sich direkt über diesem befindet. Wenn nun das Bild beben soll, bewegt man einfach dieses Objekt entsprechend hin und her.

    So viel zur Theorie.
    Ich muss aber gestehen, dass ich von der Praxis nicht viel Ahnung habe. Vielleicht gibt es eine bessere Methode oder ich rede einfach nur Unfug...

    Nein die Idee ist so genial wie einfach.

    Als Code würde ich im User event 0 benutzen:

    GML-Quellcode

    1. shake = 0;
    2. view_xview[0] = <Spieler-Object>.x-8+round(random(16));
    3. view_yview[0] = <Spieler-Object>.y-8+round(random(16));
    4. alarm[0] = 1; //Du kannst natürlich auch jedes andere alarm Event benutzen

    Im Alarm[0]:

    GML-Quellcode

    1. If(shake < 30) { //Diese Zahl und die Anzahl der Steps multipliziert, ergibt, wielange die Erschütterung dauert
    2. view_xview[0] = <Spieler-Object>.x-8+round(random(16));
    3. view_yview[0] = <Spieler-Object>.y-8+round(random(16));
    4. alarm[0] = 1;
    5. shake += 1;
    6. }

    Die Erschütterung wird dann durch ein Aufrufen des User Events ausgelöst, z.B. durch jedes Explosionsobjekt.
  • Ich habs in meinem Game damals etwas anders gelöst. Irgendwo im Raum ist ein unsichtbares Objekt (kann auch nur einmal gemacht werden -> dann hald persistent) das die gesamten views handelt. Es überprüft in welche richtung der 'Held' sieht ~ ich seh gerne etwas mehr in die richtung in die der spieler Character läuft ~ und wie nahe es schon am rand des raums ist. So hatt man auch viel mehr kontrolle über die View, z.b. wenn man dem Spieler kurz die Kontrolle wegnimmt und eine In game Zwischensequenz startet. Da kann man auch ohne probleme einen Wert 'global.ScreenShake' einbauen, wenn der größer als null ist, einfach zu den x/y koordinaten randomwerte dazuaddieren und jeden step von 'global.ScreenShake' eins abziehen.
    ...