Skocz do zawartości

MeloPL

Użytkownicy
  • Postów

    96
  • Dołączył

  • Ostatnia wizyta

Odpowiedzi opublikowane przez MeloPL

  1. Witam, zabrałem się niedawno za tworzenie prostej gry i często napotykam się na głupawe błędy.

    Tym razem mam taki problem, że gdy moja postać spada, to tuż przed wylądowaniem się zatrzymuje na ułamek sekundy i dopiero wtedy ląduje już w zwolnionym tempie.

    Co zrobić, by nie było takiego efektu?

     

    W create ustawiłem

    GML
    gravity=1;

    A w kolizji hero z obiektem block ustawiłem

    GML
    move_contact_solid(270,4);

    vspeed=0;

  2. No więc tego kodu na animacje trochę jest... Jeśli ktoś ma trochę czasu, żeby mi pomóc i znajdzie coś, co blokuje mi tę animację, to będę bardzo wdzięczny. :D

    Sam już od ponad godziny tego szukam i naszukać się nie mogę.

     

    GML
    //w CREATE:

    stoi=0.8/room_speed;//prędkość animacji stojacej.

    bieg=14/room_speed;//prędkość animacji biegu.

    sciana=15/room_speed;//prędkość animacji wchodzenia po ścianie.

    sufit=15/room_speed;//prędkość animacji, gdy bohater trzyma się sufitu.

    spada=0.9/room_speed;//prędkość animacji, gdy bohater spada.

    //w STEP:

    // Ruchy na ziemi.

    if keyboard_check(vk_right) and hspd>0 //Jesli wciskamy strzalke w prawo

    {

    sprite_index=sPlayerB; //zaladowuje sie sprite biegania

    image_speed=bieg; //predkosc klatek taka, jak w create w bieganiu

    image_xscale=1; //obraz odwrocony w prawo

    }

    if keyboard_check(vk_left) and hspd<0

    {

    sprite_index=sPlayerB; //zaladowuje sie sprite biegania

    image_speed=bieg; //predkosc klatek taka, jak w create w bieganiu

    image_xscale=-1; //obraz odwrocony w lewo

    }

    //Jeśli przestaje biegać, to stoi. LUB jeśli będzie się wciskało klawisz ruchu, lecz on straci prędkość i w ogóle nie będzie się poruszał, to animacja zmienia się na stojaca.

    if (keyboard_check_released(vk_right)) or (hspd=0 and keyboard_check(vk_right)) or (place_meeting(x,y+3,oBlock) and image_xscale=1 and image_speed=spada)

    {

    sprite_index=sPlayerS; //zaladowuje sie sprite stania

    image_speed=stoi; //predkosc klatek taka, jak w create w staniu

    image_xscale=1; //obraz odwrocony w prawo

    }

    // To samo co wyzej, tyle, ze w lewo.

    if (keyboard_check_released(vk_left)) or (hspd=0 and keyboard_check(vk_left)) or (place_meeting(x,y+3,oBlock) and image_xscale=-1 and image_speed=spada)

    {

    sprite_index=sPlayerS; //zaladowuje sie sprite stania

    image_speed=stoi; //predkosc klatek taka, jak w create w staniu

    image_xscale=-1; //obraz odwrocony w lewo

    }

     

    // Ruchy na suficie.

    //stoi na suficie:

    if keyboard_check(vk_up) and image_xscale=1 and (abStick && !place_free(x, y-1)) and !keyboard_check(vk_right) and !keyboard_check(vk_left) and image_speed!=sciana// jesli wcisniesz strzalke w gore a postac bedzie odwrocona w prawo, mozna chodzic po suficie i znajdujesz się piksel pod nim, oraz nie wciskasz strzalki w lewo/prawo

    {

    sprite_index=sPlayerUS; //sprite zmieni sie na trzymajacego sie sufitu

    image_speed=sufit; //predkosc animacji dopasuje sie do sprite trzymajacego sie sufitu

    image_xscale=1; //bedzie odwrocony w prawo

    }

    if keyboard_check_released(vk_up) and image_xscale=1 and image_speed=sufit //jeśli się puści sufitu będac odwrocony w prawo

    {

    sprite_index=sPlayerD; //sprite zmieni sie na spadajacego

    image_speed=spada; //predkosc animacji dopasuje sie do sprite spadajacego

    image_xscale=1; //bedzie odwrocony w prawo

    }

    if keyboard_check(vk_up) and image_xscale=-1 and (abStick && !place_free(x, y-1)) and !keyboard_check(vk_right) and !keyboard_check(vk_left) // jesli wcisniesz strzalke w gore a postac bedzie odwrocona w lewo, mozna chodzic po suficie i znajdujesz się piksel pod nim, oraz nie wciskasz strzalki w lewo/prawo

    {

    sprite_index=sPlayerUS; //sprite zmieni sie na trzymajacego sie sufitu

    image_speed=sufit; //predkosc animacji dopasuje sie do sprite trzymajacego sie sufitu

    image_xscale=-1; //bedzie odwrocony w lewo

    }

    if keyboard_check_released(vk_up) and image_xscale=-1 and image_speed=sufit //jeśli się puści sufitu będac odwrocony w lewo

    {

    sprite_index=sPlayerD; //sprite zmieni sie na spadajacego

    image_speed=spada; //predkosc animacji dopasuje sie do sprite spadajacego

    image_xscale=-1; //bedzie odwrocony w lewo

    }

    //idzie po suficie:

    if keyboard_check(vk_up) and !place_free(x,y-1) and keyboard_check(vk_right) and hspd>0 and hspd!=0

    {

    sprite_index=sPlayerUB;

    image_speed=sufit;

    image_xscale=1;

    }

    if keyboard_check(vk_up) and !place_free(x,y-1) and keyboard_check(vk_left) and hspd<0 and hspd!=0

    {

    sprite_index=sPlayerUB;

    image_speed=sufit;

    image_xscale=-1;

    }

    // Spadanie:

    if (place_free(x,y+1) and image_xscale=1 and image_speed!=sufit and (vspd<1.0 and vspd>0))

    {

    sprite_index=sPlayerDS;

    image_speed=spada;

    image_xscale=1;

    }

    if (place_free(x,y+1) and image_xscale=-1 and image_speed!=sufit and (vspd<1.0 and vspd>0))

    {

    sprite_index=sPlayerDS;

    image_speed=spada;

    image_xscale=-1;

    }

    if (place_free(x,y+1) and image_xscale=1 and image_speed!=sufit and vspd>1.0)

    {

    sprite_index=sPlayerD;

    image_speed=spada;

    image_xscale=1;

    }

    if (place_free(x,y+1) and image_xscale=-1 and image_speed!=sufit and vspd>1.0)

    {

    sprite_index=sPlayerD;

    image_speed=spada;

    image_xscale=-1;

    }

    // Wspina się po ścianie:

    if (place_meeting(x+1,y,oBlock) and image_xscale=1 and keyboard_check(vk_up) and keyboard_check(vk_right)) //gdy odwrócony w prawo

    {

    sprite_index=sPlayerSU;

    image_speed=sciana;

    image_xscale=1;

    }

    if (place_meeting(x-1,y,oBlock) and image_xscale=-1 and keyboard_check(vk_up) and keyboard_check(vk_left)) //gdy odwrócony w lewo

    {

    sprite_index=sPlayerSU;

    image_speed=sciana;

    image_xscale=-1;

    } // Trzyma sie sciany w bezruchu:

    if (place_meeting(x+1,y,oBlock) and image_xscale=1 and keyboard_check(vk_right) and !keyboard_check(vk_up))

    {

    sprite_index=sPlayerSS; //sprite zmienia się na postac trzymajaca sie sciany w bezruchu

    image_speed=sciana; //predkosc animacji zwiazanej z interakcja na scianie, domyslnie ustawione na "15/room_speed;"

    image_xscale=1; //odwrocone w prawo

    }

    if (place_meeting(x-1,y,oBlock) and image_xscale=-1 and keyboard_check(vk_left) and !keyboard_check(vk_up))

    {

    sprite_index=sPlayerSS; //sprite zmienia się na postac trzymajaca sie sciany w bezruchu

    image_speed=sciana; //predkosc animacji zwiazanej z interakcja na scianie, domyslnie ustawione na "15/room_speed;"

    image_xscale=-1; //odwrocone w lewo

    }

     

    EDIT. Już do tego doszedłem -> starczyło dopisać we fragmencie "if [...] (hspd=0 and keyboard_check(vk_left)" argument "!image_speed=sciana". Problem rozwiązany, dzięki TheMarcQ za to, ze pomogles ustalic, iz blokada znajduje sie gdzies dalej w kodzie : )

  3. Witam, jestem w trakcie tworzenia platformowej gry akcji na GM8 i robię właśnie różne animacje dla postaci.

    Zrobiłem zwisanie z sufitu, bieg, stanie, spadanie, itp., wszystko działa świetnie, ale niestety, z animacją wspinania się po ścianie nie jest już tak pięknie; gdy napisałem:

    GML
    // Wspina się po ścianie:

    if (place_meeting(x+1,y,oBlock) and image_xscale=1 and keyboard_check(vk_up) and keyboard_check(vk_right)) //gdy odwrócony w prawo

    {

    sprite_index=sPlayerSU;

    image_speed=15/room_speed;

    image_xscale=1;

    }

    if (place_meeting(x-1,y,oBlock) and image_xscale=-1 and keyboard_check(vk_up) and keyboard_check(vk_left)) //gdy odwrócony w lewo

    {

    sprite_index=sPlayerSU;

    image_speed=15/room_speed;

    image_xscale=-1;

    }

     

    to postać zaczyna robić animację, ale trwa ona do drugiej klatki, podczas gdy powinna wykonywać wszystkie klatki, których jest 10.

     

    Ta animacja się zacina, lecz nie wiem, w czym rzecz. Macie jakiś pomysł, żeby rozwiązać ten problem?

  4. Wojzax, obie twarze jakieś takie niekształtne, w takim nierealistycznym sensie. Kiepsko pocieniowane i ogólnie brzydkie, choć spodobały mi się włosy u tej dziewczyny na drugim obrazku. Dużo lepiej ci wychodzi pixel art. :)

  5. A mi się podoba ten styl bez kolorowania :D Kojarzy mi się trochę z japońską mangą, która często jest czarnobiała. Ja osobiście bym chciał, żeby zostało niepokolorowane, albo najlepiej pokolorowane i zmienione na czarno-białe. :)

  6. Przeszedłem całą. Fajny pomysł, oryginalny, lecz niekiedy występują bardzo irytujące momenty w poziomach, szczególnie w tym ostatnim. Irytujący dlatego, że nie wiadomo było, co jest dalej. Gdyby była jakaś minimapka chociaż, lub przytym nieco większy ekran, to bym się nie wkurzał, że na samym końcu umieszczone są kolce, w które wpadam, bo nie widziałem ich przez zbyt mały ekran... 4/5, bo wciągnęło mnie na tyle, żeby przejść całą, choć szczerze mówiąc, gdybyś porobił jeszcze więcej poziomów, to nie wiem, czy moje nerwy by pozwoliły na więcej. :>

  7. Jak to "nikt nie robi"? Jeśli nikt by nie robił, to

     

    *Ten temat by nie powstał,

    *Nie istniałyby programy do tworzenia pixelartu,

    *Nie powstawałyby gry w tym stylu...

    Mam jeszcze wymieniać? Ja wciąż widuję w darmowych produkcjach ten styl, i szczerze mówiąc lubię go. Jakoś tak bardziej działa na wyobraźnię i ma swój wyjątkowy klimat. Szczerze mówiąc bardzo bym chciał, żeby powstała taka wysokobudżetowa pixelartowa produkcja, która weszłaby na rynek tych wyższych gier (pośród wszystkich tych gier za około 100 zł). Chętnie bym taką kupił, cóż, kręci mnie taki styl. Szkoda że to jest prawie niemożliwe. :unsure:

  8. Witam, mam problem z wykonaniem obiektu, który ma się gładko zmniejszać i zwiększać, a do tego gładko lekko zanikać (tak gdzieś od 0.5 alpha do 1.0), oraz losowo klonować się (żeby powstał dokładnie taki sam obiekt, poruszający się w ten sam sposób jakieś 15 pikseli w prawo), maks 1 klon.

     

    1. Płynne zmniejszanie-Zwiększanie,

    2. Płynne zanikanie,

    3. Płynne (z użyciem zanikania) powstawanie klona i chowanie się go.

     

    No, to z tym mam problem, bo zawsze, gdy staram się to zrobić, to nie dzieje się to płynnie. :/

  9. Witam. Jak zrobić coś takiego, by obiekt płynnie falował po określonym obszarze (i za poza niego nie wychodził) w losowych kierunkach (ewentualnie coś w kształcie ósemki)?

     

    Obiekt, który ma się płynnie przemieszczać nazywa się "kasztan", a drugi obiekt odpowiedzialny za obszar ruchu kasztana nazywa się "obszar" (oczywiście nie wiem, czy ten drugi obiekt się w ogóle przyda).

     

    Od razu zaznaczę, że nie chcę, by dało się sterować obiektem "kasztan", a żeby wykonywał on sam losowe ruchy, ale płynnie, w kształcie falowania, lub cyfry 8.

  10. Witam, mam do was pytanie, jak zrobić drogę, która będzie lekko zygzakowata, z animacją, jakby się po niej chodziło, z pierwszej osoby?

     

    Chodzi o to, żeby się wydawało, że chodzi się po zygzakowatej drodze, która ciągnie się w nieskończoność (oraz żeby faktycznie była nieskończona).

  11. Nie, nic. Próbowałem nawet robiąc nowy projekt, wklejając ten sam skrypt do eventu "step" i nic więcej innego, by sprawdzić, czy to działa, lecz też nic się nie działo.

     

     

    Edit.

    Ojej, już doszedłem do błędu.

    Pisałem "imagexscale", zamiast "image_xscale" ^^

     

    Teraz wszystko działa elegancko! Dziękuję :D

  12. Witam, jak zrobić, by sprite obiektu odwracał się dzięki komendzie "image_xscale=-1" po tym, gdy myszka znajdzie się na lewej połowie tego obiektu, lub poza nim, ale z lewej strony?

     

    Jakby co, jest to gra 2D z widokiem od boku, jak w platformówce.

     

    imagexscale=-1 -> sprite jest odwrócony.

    imagexscale=1 -> sprite jest normalny.

     

    Samo odwracanie umiem, ale nie wiem, jak napisać, by przy tym, gdy myszka znajdzie się po lewej stronie od hero, coś ma się dziać, a po prawej też ma się coś dziać.

     

     

    Jakbym zrobił image angle, to sprite po odwróceniu byłby do góry nogami, no i trzeba by było zastosować "imageyscale=-1". ;]

  13. Ok, ramkę zrobiłem już sam na podstawie tego kodu. U mnie całość wygląda tak:

     

    draw_sprite(sprite_index,image_index,x,y);

    draw_rectangle_color(view_xview + 0, view_yview + 61, 151, view_yview + 43, c_black,c_black,c_black,c_black, 1);

    draw_rectangle_color(view_xview + 1, view_yview + 60, 150, view_yview + 44, c_white,c_white,c_white,c_white, 0);

    draw_rectangle_color(view_xview + 1, view_yview + 60, 150/kondycha_max*kondycha, view_yview + 44, c_gray,c_gray,c_gray,c_gray, 0);

     

    Gdzie to drugie od góry jest ramką, trzecie białym polem, a to na dole szarym paskiem.

     

    Wielkie dzięki za pomoc, masz u mnie sporego plusa! :D

  14. jesli w innym obiekcie pasek robisz to adresowac zmienne musisz do konkretnego obiektu (gracz) albo na globalnych

     

    No wiem, to chyba oczywiste. :P

     

     

    Dziękuję! :D

    Już działa, lecz mam jeszcze takie pytanie. Czy da się zmienić położenie tego paska nieco niżej, ustawić czarną ramkę dla tego paska, a na dodatek przekolorować ten pasek na szary kolor?

  15. Po zastosowaniu eventu draw w obj hero, zamiast hero, wyświetlany jest prostokąt, ale jeśli zastosuję event draw w nowym obiekcie, to mimo, że wciskam shift, a hero biega, to pasek (prostokąt) jest w jednym miejscu i się nie zmienia. Nie wiem, czy coś źle robię. Mój skrypt na bieganie, to:

     

    if keyboard_check(vk_shift)

    bieg=true

    else

    bieg=false;

    if bieg=true

    s=10;

    if bieg=false

    s=7;

     

    gdzie "s" to prędkość.

    Potrzeba tylko paska, który po zupełnym zmniejszeniu robił "bieg=false", a po tym zaczął się stopniowo ładować.

     

    Dzięki za poświęcenie na mnie czasu ;)

    Czy robię coś nie tak, że nie działa? ;x

×
×
  • Dodaj nową pozycję...