Wenn nichts ist, runterfallen

  • GM 8
  • Wenn nichts ist, runterfallen

    Hi

    Ich denke das gibts schon, aber wenn ich eingebe "Gravity bei nichts" kommt ca. 100x Wie Jumpe ich usw. hab nix dazu gefunden:

    Okay ich mach so n Lemmings game... wenn die Lemmings da auf dem Boden gehen, und dann gehts runter, also 16px grad nach unten, sollen die runterfallen.

    (Lemmings = Sandman)
    Ich hab das jetzt so gemacht:

    Im Sandman Step-Event:
    :action_iffree:
    x = 0, y: -4, objects: Only solid
    relative: true
    NOT: false
    :action_begin:
    :action_gravity:
    direction: 270
    gravity: 2
    relative: false
    :action_move1:
    :action_end:
    :action_else:
    :action_begin:
    :action_gravity:
    direction: 0
    gravity: 0
    relative: false
    :action_move1:
    :action_end:

    Collision with Boden-Event
    :action_contact:
    direction: direction
    maximum: -12
    against: solid objects

    So
    Der Sandman ist 8x8px.

    So sieht das Game dann aus, wenn ichs laufen lasse:
    Der "Sandman-Creator" spuckt einen Sandman aus, der Sandman schwebt schräg vorwärts herunter(normal), berührt den Boden und bleibt stehen.
    Der "Sandman-Creator" lässt den nächsten Sandman laufen, dieser trifft auf den ersten Sandman, und dann gehen beide (ineinander drin)
    vorwerts.

    Ich weiss, dass ihr manchmal sagt, oder denkt, ich stelle dumme Fragen oder benutze die SuFu nicht usw., aber das hab ich jetzt sicher 1h probiert, die SuFu benützt, die Hilfe, alles nichts genützt...

    Gruss

    Goldendragon
    Schul-Abschlussarbeit: Gamesammlung

    Made with: Game Maker 8 Pro
    Fertigstellung: Frühling 2011


    Fortschritt:
    Games: 5/20 (voraussichtlich 20)
    Gameübersicht-Fortschritt: 0%
  • grr... d&d! ^^... Ich kann das nichtmehr in d&d... aber in gml^^

    GML-Quellcode

    1. if (place_free(x,y+5)) // +5 kann sollte es nicht funktionieren geändert werden. (kommt drauf an wo du dein sprite zentriert hast)
    2. {
    3. gravity = 1;
    4. gravity_direction = 270;
    5. }
    6. else
    7. {
    8. gravity = 0;
    9. gravity_direction = 270;
    10. }


    Wenn das Boden event nun solid ist, dann brauchst du dort nichmal was reinschreiben. Denn: Er fliegt ja nur runter, wenn ein platz frei ist. und da ist kein platz frei, weil ja ein solid objekt ist.

    ich ahne, weiß es aber nicht, das es vll an :action_contact: liegt... weiß aber nicht, hab nich mit dem gearbeitet ;)
    aber an deinem oberen code kann es normalerweise nicht scheitern... oder welchen wert hast du denn bei :action_move1: drinnen?
    mfg Salmi
  • Viiielen dank, habs noch ein bisschen abgeändert, und ich hab jetzt keine Ahnung WIESO es funktioniert ich weiss nur DAS es funktioniert:

    Ich hab jetzt im Step-Event des Sandmans:

    GML-Quellcode

    1. if (place_free(x,y+5)) // +5 kann sollte es nicht funktionieren geändert werden. (kommt drauf an wo du dein sprite zentriert hast)
    2. {
    3. gravity = 20;
    4. gravity_direction = 270;
    5. }
    6. else
    7. {
    8. gravity = 0;
    9. gravity_direction = 270;
    10. Sandman.direction = 0 vspeed = 8
    11. }
    Alles anzeigen


    und

    :action_move1: Direction: ("rechts") Speed 8

    und im :event_collision: Ground kein :action_contact:

    Ich weiss nicht wieso das funktioniert denn :action_move1: hab ich ja schon in GML gesagt oder nicht?

    Jedenfalls funktionierts also danke :D

    Gruss

    Goldendragon
    Schul-Abschlussarbeit: Gamesammlung

    Made with: Game Maker 8 Pro
    Fertigstellung: Frühling 2011


    Fortschritt:
    Games: 5/20 (voraussichtlich 20)
    Gameübersicht-Fortschritt: 0%
  • Immer wieder gern ;)


    Ja das :action_contact: symbol und dann direction dazu schreiben... naja das verträgt sich nicht mit dem anderen code.
    lass das lieber allgemein weg.(das symbol)... da kann man leicht schwierigkeiten bekommen...


    GML-Quellcode

    1. if (place_free(x,y+5)) // Wenn ein platz 5 y unterhalb des objektes frei ist, dann...
    2. {
    3. gravity = 20; // gravitivität ist 20, spieler geht runter
    4. gravity_direction = 270; // undzwar mit der Richtung 270 grad. (360 bzw. 0 Grad = rechts, 90 grad oben, 180 links, 270 unten)
    5. }
    6. else // Wenn kein Platz frei ist dann...
    7. {
    8. gravity = 0; // Keine gravity
    9. gravity_direction = 270; // aus welchem grund auch immer 270 :D
    10. Sandman.direction = 0 vspeed = 8 // Damit sagst du, das du nach unten willst, aber nach rechts^^ Nächstes mal (oder gleich ausbessern) schreibst du simpler: hspeed = 8.
    11. }
    Alles anzeigen


    vspeed = vertical speed = speed SENKRECHT (hoch,runter)
    hspeed = horizontal speed = speed WAAGRECHT (links, rechts)

    um links, rechts, oben oder unten einzeln hinzubekommen, musst du dich mit - werten spielen ;) (vspeed = -8 wäre z.B. hinauf ;) )
    und weil wir oben ja bereits fragen, ob ein platz, sprich ein solides objekt 5y unter dem objekt ist, und deine wand auch solid ist, brauchst du kein kollisionsevent schreiben ;)

    und ich geb dirn tipp^^ nimm statt speed einfach hspeed bzw. vspeed. dann brauchst du keine 0101010 schreiben :D (in gml..) Kannst es aber auch mit jump to machn... ich machs halt meißtens mit h und vspeed ;)
    die zwei komponenten sind z.B. auch n Bestandteil für ne physik engine. (kann man bestimmt anders auch machen, aber ich kenns nur so o.o)
    mfg Salmi
  • Benutzer online 1

    1 Besucher