Skocz do zawartości

Xender

Użytkownicy
  • Postów

    4
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Xender

  1. Problem w tym że nie mogę odpowiednio ustawić origin, jak dam za wysoko to się blokuję, jak za nisko to przełącza mi cały czas sprite. Może powinienem włączyć te opcje precyzyjnej kolizji?
  2. Działa, dzięki :D mam jeszcze jedno pytanie co do spriteów, czy różne sprite'y ruchu dla jednego obiektu muszą mieć ten sam rozmiar czy mogą być różne? Problem jest taki że gdy mam sprite od stania w miejscu i biegania to gdy uaktywnia się stanie to postać się blokuje. Jak poprawnie ustawić Origin żeby nie było z tym problemu?
  3. Sprawdzałem już tą opcję niestety nic to nie dało. Zasadniczo w takiej sytuacji w momencie gdy postać jest kilka pxieli nad gruntem to sprite zmienia się kilkukrotnie między staniem w miejscu a opdaniem. Jak wywalam to else grounded = 0; to wszystko działa poprawnie, z tym że w sytuacji gdy swobodnie opadam to niestety nie ma animacji opadania, tylko gdy wcześniej skoczę.
  4. Tworzę platformową grę, na razie jestem na etapie dodawania animacji, osobno dla biegu, stania i spadania. Kolizja i poruszanie działa bez błędnie. Oto kod: Jest to kod dla postaci gracza dla eventu Create: GML vsp = 0; //vertical speed initialization hsp = 0; //horizontal speed initalization grounded = 0; //1 - object touch ground, 0 - not touching grav = 0.5; Natomiast to dla eventu Step: GML Key_W = keyboard_check_direct(ord("W")); Key_S = keyboard_check_direct(ord("S")); Key_A = keyboard_check_direct(ord("A")); Key_D = keyboard_check_direct(ord("D")); //Move left and right if(Key_A) { hsp = -4; image_xscale = -1; } if(Key_D) { hsp = 4; image_xscale = 1; } if((Key_A && Key_D) or (!Key_A && !Key_D)) { hsp = 0; anim = 0; } //Jumping if(Key_W) { if(grounded) { vsp = -12; grounded = 0; } } vsp += grav; //Vertical Collision if (place_meeting(x, y + vsp, par_wall) and vsp > 0) { while (!place_meeting(x, y+1, par_wall)) y += 1; vsp = 0 grounded = 1; } //Ceiling Collision if (place_meeting(x, y + vsp, par_wall) and vsp < 0) { while(!place_meeting(x, y-1, par_wall)) y -= 1; vsp =0 } //Horizontal Collision if (place_meeting(x + hsp, y, par_wall)) { while (!place_meeting(x + sign(hsp), y, par_wall)) x += sign(hsp); hsp = 0; } //Commit to movement x += hsp; y += vsp; //Animation if(grounded) { if (hsp != 0) { sprite_index = run; } else { sprite_index = stand; } } else { if (vsp < 0) { sprite_index = jump; } else { sprite_index = fall; } } Wszystkie sprite'y zmieniają się poprawnie poza sytuacją gdy swobodnie spadam bez wcześniejszego podskoczenia. Na przykład: gdy podejdę do krawędzi i nie wykonując skoku po prostu z niej spadnę. Dzieje się tak ponieważ zmienna grounded (określa czy znajduję się na ziemi czy nie) nie przestawia się na 0 (czyli jestem w powietrzu) przez co nie wchodzi do bloku który zmienia animacje na jump lub fall. Niestety gdy blok odpowiedzialny za zmianę jump i fall zrobię jako niezależny od grounded, to podczas lądowania na ziemi animacja zmienia się kilka razy między animacją stand i fall przez co postać wygląda jak by się telepała. Jak to rozwiązać?
×
×
  • Dodaj nową pozycję...