Tile-Kollision+Gravity problem

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

  • Tile-Kollision+Gravity problem

    Hallo zusammen.. hab wieder einmal ein Problem

    also.. ich will ein Jumpn Run Spiel machen bei dem der Char mit dem Land (Tilesets) kollidiert. Das ganze funktioniert auch perfekt.. (mit vspeed und so).. nur mit der gravity nicht ;) warscheinlich ein denkfehler... das genaue problem ist das der "dummy" nicht pixelgenau exakt am richtigen Punkt stehen bleibt. mal ist er ein Pixel im Tileset versunken, mal ein drüber..

    hier der Code der im Step Event aufgerufen wird :

    GML-Quellcode

    1. // Untere linie überprüfen ob eine Tilekollision besteht ( 15*28 groß )
    2. if tile_layer_find(10,x,y+28)
    3. or tile_layer_find(10,x+1,y+28)
    4. or tile_layer_find(10,x+2,y+28)
    5. or tile_layer_find(10,x+3,y+28)
    6. or tile_layer_find(10,x+4,y+28)
    7. or tile_layer_find(10,x+5,y+28)
    8. or tile_layer_find(10,x+6,y+28)
    9. or tile_layer_find(10,x+7,y+28)
    10. or tile_layer_find(10,x+8,y+28)
    11. or tile_layer_find(10,x+9,y+28)
    12. or tile_layer_find(10,x+10,y+28)
    13. or tile_layer_find(10,x+11,y+28)
    14. or tile_layer_find(10,x+12,y+28)
    15. or tile_layer_find(10,x+13,y+28)
    16. or tile_layer_find(10,x+14,y+28)
    17. {
    18. vspeed=0;
    19. gravity=0;
    20. }
    21. else gravity=0.01 gravity_direction=270;
    Alles anzeigen


    jaja ich weiss .. chaoscode ;)

    das ist auch im step event drin.. das ganze kann man ja noch optimieren.. aber es geht erstmal ums grundlegende beim jumpn run..

    GML-Quellcode

    1. // Wenn eine Taste gedrückt wird, wird der Wert jump auf 1 gesetzt
    2. if keyboard_check_pressed(vk_up) and vspeed=0
    3. {
    4. jump=1;
    5. }
    6. // Ist der Wert jump größer als 0 wird vspeed auf -1 gesetzt.. also der dummy geht nach oben.. springen wird simuliert
    7. if jump > 0
    8. {
    9. vspeed=-1
    10. jump=jump+1
    11. }
    12. // ist der wert jump größer als 2 wird er zurück gesetzt.. das springen ist somit zuende
    13. if jump > 2
    14. {
    15. jump=0;
    16. }
    Alles anzeigen


    irgendwo hier muss der wurm sein :-/ :?: :?: :?: :?:
  • RE: Tile-Kollision+Gravity problem

    versuch mal das:

    GML-Quellcode

    1. // Untere linie überprüfen ob eine Tilekollision besteht ( 15*28 groß )
    2. var tileid,i;
    3. tileid=-1;
    4. for(i=0;i<=14;i+=2)
    5. {
    6. tileid= tile_layer_find(10,x+i,y+28)
    7. if(tileid)
    8. {
    9. i=15;
    10. }
    11. }
    12. if(tileid)
    13. {
    14. y=tile_get_y(tileid)-28;
    15. vspeed=0;
    16. }
    Alles anzeigen


    ich habe mal aus Performancegründen 2er pixelschritte gemacht, das sollte aber bei einer Breite von 15px nichts ausmachen.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von Verwurster ()

  • Mit Schleife ists komfortabler ;)
    Hier mal der Code, der garantiert funktioniert:

    Create event:

    GML-Quellcode

    1. gravity=0.5;
    2. gravity_direction=270;
    3. onground=false;


    End-step event:

    GML-Quellcode

    1. // Untere linie überprüfen ob eine Tilekollision besteht ( 15*28 groß )
    2. var tileid,i;
    3. tileid=-1;
    4. for(i=0;i<=14;i+=2)
    5. {
    6. tileid= tile_layer_find(10,x+i,y+28)
    7. if(tileid)
    8. {
    9. i=15;
    10. }
    11. }
    12. if(tileid)
    13. {
    14. y=tile_get_y(tileid)-28;
    15. vspeed=0;
    16. onground=true;
    17. }
    18. else
    19. {
    20. onground=false;
    21. }
    Alles anzeigen


    Und das auch ins end-step event:

    GML-Quellcode

    1. if (keyboard_check_pressed(vk_up)&&onground)
    2. {
    3. vspeed=-10
    4. }
    5. if(keyboard_check_released(vk_up)&&vspeed<0)
    6. {
    7. vspeed=0;
    8. }
    9. speed=min(speed,27);

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Verwurster ()

  • Ich sag schonmal danke ;) habs mal eingebaut.. muss evtl. noch die optimale einstellung zusammenbasteln ;) aber... THX ;)

    EDIT : Hab die Variante nun mal beim alten PC getestet.. aber.. wegen dem loop sinkt die FPS von 60 fps auf 40 herab :-/ gibts da keine andere möglichkeit dies umzusetzen ? oder den speed zu optimieren ? wenn ich den loop abschalte gehts schneller wie gesagt... aber dann hab ich keine kollision mehr :-/

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