Skocz do zawartości

Chodzenie w wysokiej trawie i obrót w draw_part


Rekomendowane odpowiedzi

  • Filar Społeczności

Macie może jakieś pomysły jak można by zrobić chodzenie w wysokiej trawie w grze z widokiem 3/4?

 

image.png.a828140de787ba3a37cf87fccad1b58f.png Wymyśliłem żeby rysować połowę gracza przy kolizji jego x i y z trawą.

image.png.7f1e9815d70c921cb0ddee72cdce27a4.pngAle zawsze są jakieś problemy przy krańcach trawy, gracz wystaje na dole / po boku i całe złudzenie się psuje :(

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Wciąż miałem problem z wystającymi fragmentami po boku, więc stanęło na oddzielnym obiekcie dla każdego rycerza który zajmuje się rysowaniem dolnej części sprite'a.

Kolejny problem jaki mam to to że używam

Cytuj

draw_sprite_part_ext(sprite_index,image_index,
                        0,0,sprite_width,sprite_height-40,                // rysowanie gornej czesci sprite'a
                        x-sprite_xoffset,y-sprite_yoffset,                  // x i y 
                        image_xscale,image_yscale,                      //skalowanie

                        c_white,image_alpha)

Origin sprite'a to (48,60), ale ta funkcja rysuje sprite od zera ale jakby w punkcie originu i wymusza ręczne jego zmienianie (odejmując sprite_xoffsetsprite_yoffset od x i y)

Kiedy jako xscale dam 1 wszysko jest ok, ale gdy dam -1 sprite całkiem znika :o

Nie mam pojęcia dlaczego tak się dzieje, możliwe że odbija go w poziomie względem zmienionego originu dziwne to jest.

 

@EDIT:

okej, już czaję. x i y w tej funkcji odpowiadają za to skąd jest rysowany sprite i jednocześnie wskazują punkt poprzez który następuje odbicie sprite'a.

To prowadzi to sytuacji w której można odbić sprite albo w lewo albo w prawo, chyba nie da się odbić przez środek hmm :(

 

@EDIT2:

już myślałem że nic nie pomoże, ale już wiem co było problemem - przy obliczaniu sprite_width game maker bierze pod uwagę sprite_xscale (jeśli xscale będzie -1 to sprite_width będzie na minusie!). Wystarczyło więc pomnożyć sprite_width przez sprite_xscale żeby się wyrównało i działa!!! :D

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Nnno nie, bo jak wystaje rycerzyk z boku to widać że nie ma nóg.

A jak zrobisz rysowanie dwóch części tułowia to jedna ma być pod a druga nad trawą. Bez dwóch obiektów tak się nie da.

 

s3p2rhR.gif

Odnośnik do komentarza
Udostępnij na innych stronach

A spróbuj zrobić tak:

Jeżeli nie styka się z trawą rysuj normalnie.

Jeżeli styka się z trawą rysuj dolną część, potem trawę na pozycji obiektu z którym kolidujesz, potem górną połowę.

Chociaż jak teraz myślę to może być z tą kolejnością operacji problem przy zetknięciu z dwoma obiektami trawy.

Edit: Mimo zauważenia błędu w mojej logice i tak zapostowałem bo jakby zedytować ten proces myślowy którym zarzuciłem raczej znajdziesz rozwiązanie

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

To mogłoby być lepsze rozwiązanie w sumie. Chyba wydajniejsze. Problem mógłby się pojawić gdy dwie jednostki dotykają tej samej kępki trawy - jeśli jest jakaś przezroczystość (tak jak u mnie w spricie zboża) to będzie się na siebie nakładać. Ale w sumie dobry pomysł muszę przetestować.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...