sehr einfache physic engine

  • GM 8

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

  • sehr einfache physic engine

    Ich habe grad das problem das gewisse objekte in emeinem spiel herunterfallen sollen wenn unter ihnen nichts "solides" mehr ist meine selbsgebastelete funktion funzt allerdings nicht so ganz sondern nur manchmal denn oft bleiben die objekte in der luft hängen oder fliegen durch die gegend .
    kann mir vieleicht jemand helfen mein aktueller code ist:

    GML-Quellcode

    1. Step Event:
    2. if relative position (0,1) is collision free for Only solid objects
    3. set the gravity to 1 in direction 270
    4. else
    5. set the gravity to 0 in direction 270
    6. if vspeed is larger than 12
    7. set the vertical speed to 12

    und

    GML-Quellcode

    1. Collision Event with object obj_parent_floor:
    2. move in direction direction at most 120 till a contact with solid objects
    3. set the vertical speed to 0
    :rage:
  • also ich versuche es nochmal vergeßt einfach alles was oben steht so ich verzweifle grad daran ein objekt bsp eien kist runterfallen zu lassen wenn unter ihr keine andere kiste, der boden oder ein andres solides objekt ist . das klingt zwar einfach aber das ist es nicht oder ich bin einfach zu doof meine versuche enden immer damit dass entweder die objekte in der luft hängen bleiben , sich seltsam bewegen oder mei mehr als 2 ineinader verschaltet sind . weiß irgendjemand einen code /script um einfach objete runterfallen zu lassen ?
    :rage:
  • Ganz einfach,
    vspeed wird von der Gravity beinflusst, deshalb bewegt der Spieler sich auch immer schneller und schneller, und der vspeed wird immer Größer.
    Und so bewegt sich der Spieler dann auch mal mit 8 pixel pro step,
    Und landet dann in einer wand, da er nur in 1 pixel vorraus prüft.

    GML-Quellcode

    1. if (!place_free(x, y + abs(vspeed) + 1)) {
    2. vspeed = 0;
    3. gravity = 0;
    4. } else {
    5. gravity = 0.2;
    6. }
    :saint:
  • Stimmt. Genau das ist das Problem.
    Gut erklärt.

    Dein Code wird sogar noch besser, wenn eine weitere Zeile hinzugefügt wird:

    GML-Quellcode

    1. if (!place_free(x, y + abs(vspeed) + 1)) {
    2. vspeed = 0
    3. gravity = 0
    4. move_contact_solid(270,-1)
    5. } else {
    6. gravity = 0.2
    7. }
    ---------------------------
    http://games.pixas.de
    ---------------------------
  • Benutzer online 1

    1 Besucher