JnR Problem

  • JnR Problem

    Also ich persönliche konnte noch keins der J&R's leiden, in denen die Sprunghöhe von der länge des Drückens abhängt. Aber copy, wenn du schonmal richtig gut darin bist, dann hilf mir doch mal bei einem J&R Problem.

    Das ist der Problemcode:


    TASTATURABFRAGE

    GML-Quellcode

    1. if ( keyboard_check(vk_right) ) {
    2. if ( !place_free(x,y+1) ) {
    3. for(i=moveSpd;i>=-moveSpd;i-=1) {
    4. if ( place_free(x+moveSpd,y+i) ) {
    5. if ( i<=0 ) {
    6. object_set_sprite(1,spr_player);
    7. x += floor( moveSpd * cos(arctan2(i,moveSpd)) );
    8. y += round( moveSpd * sin(arctan2(i,moveSpd)) );
    9. }
    10. else {
    11. x += moveSpd;
    12. y += i;
    13. }
    14. break;
    15. }
    16. }
    17. }
    18. else {
    19. x += moveSpd;
    20. }
    21. }
    22. if ( keyboard_check(vk_left) ) {
    23. if ( !place_free(x,y+1) ) {
    24. for(i=moveSpd_back;i>=-moveSpd_back;i-=1) {
    25. if ( place_free(x-moveSpd_back,y+i) ) {
    26. if ( i<=0 ) {
    27. object_set_sprite(1,spr_player_left);
    28. x -= floor( moveSpd_back * cos(arctan2(i,moveSpd)) );
    29. y += round( moveSpd_back * sin(arctan2(i,moveSpd)) );
    30. }
    31. else {
    32. x -= moveSpd_back;
    33. y += i;
    34. }
    35. break;
    36. }
    37. }
    38. }
    39. else {
    40. x -= moveSpd_back;
    41. }
    42. }
    43. if ( keyboard_check_pressed(vk_up) ) {
    44. if ( !place_free(x,y+2) ) {
    45. vspeed = -jumpSpd;
    46. }
    47. }
    Alles anzeigen



    GRAVITATION

    GML-Quellcode

    1. if ( place_free(x,y+2) ) {
    2. gravity_direction = 270;
    3. gravity = 1;
    4. }
    5. else {
    6. gravity = 0;
    7. move_contact_solid(270,(y-yprevious)/2);
    8. }
    9. vspeed = min(vspeed,10);



    COLLISION MIT BLOCK

    GML-Quellcode

    1. if ( true ) {
    2. if (vspeed > 0 ) {
    3. move_contact_solid(270,(y-yprevious)/2);
    4. vspeed = 0;
    5. }
    6. else if ( vspeed < 0 ) {
    7. vspeed = 0;
    8. }
    9. }


    Ich hab keine Ahnung was ich falsch gemacht habe, aber immer wenn ich beim runterfallen von der Seite gegen einen Block stoße, rase ich auf den unter mir liegenden Block, oder, wenn da nichts ist, aus dem Raum raus, und das geht so schnell das man es erst sieht, wenn der Spieler schon da oder weg ist.


  • Ersetz die "270" bei der Kollision mit dem Block durch "direction", sofern sich die direction Variable der tatsächlichen direction anpasst, du also mit hspeed/vspeed arbeitest. Ansonsten müsstes du dir eine eigene direction variable erstellen, die sich jeden step aktualisiert.
  • Äh, jetzt fühle ich mich aber verschoben ^^

    Ich habs darein geschrieben, weil ich das schonmal als Thema hatte aber niemand antwortete.
    Ich versuch das mit der dirsction mal. ich arbeite zwar ( glaub ich ) nicht immer mit hspeed und vspeed aber naja..


    Ne, klappt nicht. Ist nicht schlechter, aber ändert auch nichts.^^


  • Das mit der Sprunghöhe ist relativ einfach:

    GML-Quellcode

    1. // Step Event
    2. if !(keyboard_check(vk_up)) && (vspeed < 0) {vspeed *= 0.7;}
    3. if !(keyboard_check(vk_up)) && (vspeed < 0) {vspeed = min(0,vspeed+0.5);}

    Eins von den zweien kannst du nehmen, müsste jetzt selbst testen was besser aussieht ^^

    Ich blick durch deinen Code wenig durch xD

    PS: Ich bin nicht gut in J&R-Problemen, die Engine war mein erster richtiger funktionierender Versuch.
  • Das liegt daran, dass dein Spieler, wenn du in den Block seitlich reinbretterst, versucht auf dem nächsten Block zu landen.
    Collision mit Block: move_contact_solid(270,(y-yprevious)/2));
    Achja, ich denke du kannst (y-yprevious)/2 durch vspeed ersetzten.

    PS: Schau dir doch mal meine Engine (und die Hilfe dazu) an und sieh, wie ich's gemacht hab.
    Da kann man nämlich nicht in die Blöcke von der Seite rammen :D
  • Wenn ich dein Engine kopiere hab ich das nicht selbst gemacht ( und das hasse ich ), deshalb, ändere doch mal meinen code so wie du glaubst das es besser ist weil wenn du irgendwas sagst weiß ich nicht wo du das meinst^^

    Ich hab geändert was du sagstest und ES HAT GEKLAPPT. Man das sone Zeile Code die man eigentlich ganz schlau findet ^^ so viel anrichten kann :cursing:


  • Benutzer online 1

    1 Besucher