Instabile Brücke

  • GM 8

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

  • Instabile Brücke

    Guten Abend meine Herren,

    ich gehe jetzt mal ganz ohne Frevel davon aus, dass hier keine Damen anzutreffen sind.
    Ich habe mich vor ein paar Minuten hier im Forum angemeldet, nachdem mir sowohl die bisherigen Beiträge als auch Google keine Antwort auf mein Problem liefern konnten. Ich möchte die Gelegenheit auch nutzen mich kurz vorzustellen, aber um hier nicht alles mit Irrelevantem vollzuspammen, möchte es in diesem kurzen Vierzeiler zusammenfassen:


    Ich mag's nicht, über mich zu reden
    Sei's in Prosa oder Schweden
    Drum will ich mich doch nicht verrenken
    Und auf's Denken mich beschränken.

    Ich arbeite seit kurzem an meinem ersten ernsthaften Spiel, habe jedoch jahrelange Erfahrung mit Game Maker, ja, ich gebe es zu, ich bin ein psychopathischer Prokrastinator - deshalb wollte ich auch mit meiner Anmeldung auf die Fertigstellung meines Spiels warten, doch drängt mich diese Frage nun dazu. Um endlich auf den Punkt zu kommen:

    In meinem Plattformer habe ich eine der klassischen Brücken, die nach kurzer Zeit zu wackeln anfangen und nach weiterer kurzer Zeit zerfallen, sobald der Spieler sie betritt. Das bekomme ich alles soweit hin, nur ist mein Problem, dass die Brückenteile mit all dem erst anfangen, nachdem der Spieler es verlassen hat, sei es durch Gehen oder Springen.

    Meine Codes:
    Für den Spieler nur im :event_collision: Collision Event:

    GML-Quellcode

    1. move_contact_solid(direction,19);vspeed=0;



    Für das Brückenteil:
    :event_create: Create Event:

    GML-Quellcode

    1. shake=0;falling=0;
    2. middlex=x;middley=y;drawx=x;drawy=y;



    :event_step: Step Event:

    GML-Quellcode

    1. if (place_meeting(x,y-1,obj_player)) alarm[0]=0.2*room_speed;//Hier müsste irgendwo der Haken sein
    2. if (shake=1) {{ if (drawx=middlex) drawx+=irandom_range(-2,+2); else drawx=middlex; } { if (drawy=middley) drawy+=irandom_range(-2,+2); else drawy=middley; }}//Das kontrolliert das Wackeln



    :event_timer: Alarm 0:

    GML-Quellcode

    1. shake=1;alarm[1]=0.8*room_speed;



    :event_timer: Alarm 1:

    GML-Quellcode

    1. shake=0;falling=1;gravity_direction=270;gravity=1.2;



    :event_draw: Draw Event:

    GML-Quellcode

    1. if (falling=0) draw_sprite(spr_bridge,-1,drawx,drawy);else draw_sprite(spr_bridge,-1,x,y);//Hier auch wieder nur das Wackeln



    Und im Outside View Event dann eben instance_destroy()

    Ich hoffe nun, ihr könnt mir weiterhelfen, verzeiht mir anfängliche Noobismen und dass ich bald ein fertiggestelltes Spiel vorstellen kann. Danke im Voraus!

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

  • Erstmal willkommen im Forum!
    Das Problem ist ganz eindeutig. Es liegt, wie du schon vermutet hast, an der Zeile, wo du den alarm[0] auf 0.2*room_speed setzt. Der Alarm wird nämlich erst dann ausgelöst, sobald er abgelaufen ist. Da du aber jeden Step überprüfst, ob der Player auf der Platform steht, wird auch jeden Step, vorrausgesetzt, der Player steht auch noch drauf, der Alarm wieder von neu auf 0.2*room_speed gesetzt. Also wird er erst ablaufen können, wenn der Player die Platform verlässt.
    Du kannst das Problem lösen, indem zu eine Variable deklarierst und sie, sobald der Player auf der Platform steht, auf 1 setzt. Zudem prüfst du dann mit einer and Verknüpfung noch, ob die Variable nicht auf 1 steht. Der Code müsste dann so aussehen:

    Create-Event:

    GML-Quellcode

    1. collision_detect=0


    GML-Quellcode

    1. if (place_meeting(x,y-1,obj_player) and collision_detect==0)
    2. {
    3. alarm[0]=0.2*room_speed;
    4. collision_detect=1
    5. }
  • Auch von mir ein Willkommen ins Forum, junger Poet xP

    $Marvin$ hat vollkommen recht, nur geht das ganze auch ein wenig einfacher denn du kannst dir die Variable sparen:

    GML-Quellcode

    1. if place_meeting(x,y-1,obj_player)
    2. if alarm[0] = -1
    3. alarm[0]=0.2*room_speed;


    Dies Funktioniert da Alarme im "Ruhezustand" immer den Wert -1 haben.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)