springen... zwei probleme, keine ahnung warum :(

  • GM 8
  • springen... zwei probleme, keine ahnung warum :(

    hi ich habe zwei probleme

    problem 1:

    jenachdem wie hoch eine ebene ist, bleibt ein kleiner freier platz zwischen kopf des players, und ebene. oder der player kollidiert mit der ebene, und gleitet durch sie hindurch... mein code ist

    GML-Quellcode

    1. sprung_hoehe=-10;
    2. if(sprung<1)and(keyboard_check(vk_up))and!(place_meeting(x,y,obj_treppe))
    3. and(place_free(x,y+vspeed))and!(place_meeting(x,y,obj_tor))and(mask_index=spr_player_mask){
    4. while!(place_free(x,y+2+sprung_hoehe)){
    5. sprung_hoehe+=0.1;
    6. }
    7. vspeed=sprung_hoehe;
    8. sprung+=1;
    9. }
    10. if!(place_free(x,y+1)){
    11. sprung=0;
    12. }
    Alles anzeigen


    zweite problem ist, beim landen, bremst der player vor dem boden ab, und senkt dann zum boden.
    der code der dafür verantwortlich ist, wird vermutlich dieser hier sein..

    GML-Quellcode

    1. // - Gravitation -
    2. gravity_direction=270;
    3. if (place_meeting(x,y+1+vspeed,obj_boden_par))
    4. or (place_meeting(x,y+1+vspeed,obj_treppe))
    5. or (place_meeting(x,y+1+vspeed,obj_kanone))
    6. or (sprite_index=spr_im_tor)
    7. {
    8. gravity=0;
    9. move_outside_solid(90,1);
    10. if!(vspeed=0){
    11. vspeed=0;
    12. }
    13. }
    14. else
    15. {
    16. gravity = 0.5;
    17. }
    Alles anzeigen


    ich weiß nicht woran das liegt :(...

    gruß gruen


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

  • Hi,
    Ich glub ich kans dir sagen:
    sprung+=1 damit kann das nur einmal jeh bodenberührung ausgefürt weren wobei er nur
    0.1 hoch spring...
    außerdem müsste man space gedrückt halten waeil sonst nicht alle bedingungen erfüllt sind.
    mach diese sprung_hoehe variable weg und nimm einfach vspeed=-10 oder so.
    wenn du ne gravity hast wird das dann ausgeglichen.
    falls das alles nciht hilft, solltest du doch überlegen es zu uploaden damit man sich das genauer angucken kann (falls es wieder an etwas anderen liegt);

    ein bei mir beliebter fehler ist auch das die friction höher ist, und damit der player sich garnicht bewegen kann,
    oder das die grav zu hoch ist.
    ---------------------------------------------------------------------------------
    Zum zweiten problem: move_contact_solid nicht move_outside solid, sonst weiß er das er den boden berühren wird (also mit deinen code) und fürht den code aus.
    benutzt du allerding move contact solid springt er dierekt zum boden, was aussieht als würde er landen.
  • nee daran liegt das nicht, die vspeed-variable, steht auch auf 10(sprunghöhe), undwenn etwas im weg ist, dann wird die sprung höhe solange um 0.1 kleiner, bis er nichtmehr mit dem objekt über dir kollidiert. hat aber nichts mit der boden berührung zu tuhen, soweit ich das beurteilen kann...
    aber jetzt wo du das sagst, seh ich das ich eine kleinigkeit nicht mit kopiet habe... ich editier eben mal meinen ersten beitrag...


  • Hellfish schrieb:

    vspeed-=sprunghöhe nicht vspeed
    sonst bewegt er sich ja nach unten

    nein tut er nicht denn sprunghoehe=-10
    wenn vspeed dann =sprunghoehe ist, ist vspeed=-10
    des stimmt also schonmal so, das zweite probier ich in zwei stunden aus, muss nämlich grad weg, ich editier mein beitrag dann nochens...


  • so ich hab mir mal die mühe gemacht, eine beispiel version zu erstellen, wie das bei mir programmiert ist


    springt einfach mal gegen die verschieden hohen ebenen die ich da angebracht habe... bei der höchsten ebene wird euch auffallen, dass ihr durch sie hindurchgleitet.
    bei den tieferen ebenen wird euch auffallen dass gut und gerne 4 pixel(ungefähr 4px) platz zwischen kopf und ebene bleiben beim springen.

    außerdem bremst der spieler beim landen kurz ab so dass er 4 px. in der luft steht bevor er auf dem boden aufkommt
    (ich weiß natürlich nciht ob das wirklich 4px sind, hab ich jetzt nur geschetzt.)
    Dateien
    • bsp.rar

      (15,04 kB, 125 mal heruntergeladen, zuletzt: )


  • zu meiner verteidigung muss ich sagen, das ich dachte das du willst dass ich

    {
    gravity=0;
    move_outside_solid(90,1);
    if!(vspeed=0){
    vspeed=0;

    mit

    {
    gravity=0;
    move_contact_solid(90,1);
    if!(vspeed=0){
    vspeed=0;
    }

    ersetzen sollte, und dass hatte nicht geklappt. was du bei deiner spring-erklährung meintest hatte ich erst garnicht so richtig verstanden. ich hab zwar so gemacht wie ich dachte das du meinst, aber hab es nicht hinbekommen.

    aber mir ist aufgefallen das ein bug dennoch (auch in deiner version :S) vorhanden ist.
    und zwar wenn du gegen die niedrigeren ebenen springst sind zwischen ebene und kopf ca 4-5 pixel frei.

    nächstes mal probierst du am besten erstmal aus was ich sage statt zu behaupten es geht nicht X(
    hab ich getan. Und deine sprung-lösung, hatte ich so versucht zu coden:

    while!(place_free(x,y+2+vspeed))//oder ähnlich

    statt:

    while!(place_free(x,y+2+sprung_hoehe))
    aber des hatte nicht funktioniert



    }


  • bei meiner version tritt keins der zwei probleme auf Oo
    er gleitet nichtmehr durch sie hindurch und er landet nichtmehr langsam.
    falls du wissen willst woran deine bugs lagen: durch move_outside_solid(90,1) hat sich der player mit einen speed von 1 nach oben bewegt, und desshalb ist er durch die plafrom geglitten.
    wieder durch move:outside_solid(90,1) hat er sich mit einer geschwindichkeit von 1 gesekt [game maker tut nur was man ihn sagt xD] du musst -1 verwenden damit er sofort zur endpostion geht
  • oh das mit -1 hab ich nicht gewusst :S...

    einer der beiden buggs ist tatsächlich weg :) (Danke erstmal an dieser stelle :))
    Ich dachte ich hätte einen dritten bug erwähnt, (hab ich aber nicht) und zwar äußert der sich wie volgt.

    ich springe vom boden aus gegen eine platform die sich über mir befindet. Je nachdem wie hoch sich diese plattform über meinem Kopf(also kopf des spielers xD) befindet, berührt er die plattform über ihm nicht mit dem kopf.
    aufgefallen ist mir das bei besonders niedrig liegenden plattformen. So auch in meinem bsp. wenn du da von unten gegen eine der niedrigeren plattformen springst, wirst du sehen dass der ca 4 pixel platz zwischen kopf und plattform hat.

    (ich mach mal schnell ein kleines video :)) Klick
    im video enthalten sind beide noch vorhandenen buggs. das durch die ebene gleiten ist immernoch vorhanden (hab nichts verändert)


  • der bug bleibt bestehen wenn ich schreibe.

    GML-Quellcode

    1. sprung_hoehe=-10;
    2. if(sprung<1)and(keyboard_check(vk_up))
    3. and(mask_index=spr_player_mask)and(place_free(x,y+2+sprung_hoehe)){
    4. vspeed=sprung_hoehe;
    5. sprung+=1;
    6. }
    7. if!(place_free(x,y+1)){
    8. sprung=0;
    9. }


    aber das der durch die ebene gleitet, da hab ich die falsche bsp datei geöffnet. bei dir sind beide buggs ausgemärtzt ;)

    ist halt nurnoch der vorhin beschriebene bug drin.... aber wie gesagt wenn ich das so schreibe wie oben geht der nicht raus :S


  • ja hab ich:

    jeh nach höhe und sprunghöhe war der vspeed zufällig genau richtig das er gerade so die ebene ereichte.
    wenn er zu schnell war hat er dafor gestopped.

    ich denke das das mahr zu einen chat wird weil kein anderer sich an diesen thema beteiligt xD
    also wenn du noch mehr fragen und probleme zum thema platform hast kanst du mich ruhig auf skype anschreiben: mister.x95 oder send eine pn