Skocz do zawartości
  • 1
Wojzax

Chodzenie w wysokiej trawie i obrót w draw_part

Pytanie

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 :(

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

11 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Może zrób trawę 4x mniejszą i to ją rysuj dopiero w kolizji z dolną połową rycerza?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Tak myślę, że maska kolizji powinna być tylko na tym jasno-beżowym elemencie.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

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

  • Lubię (+1) 1

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

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ć.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

A co gdyby tak sprity graczy podzielić na 4 części? I analogicznie do pierwszego sposobu, ukrywać także bok postaci która wchodzi w kolizję. W zasadzie to podział na 3 części była by wystarczająca bo góra jest zawsze widoczna.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Mniej optymalne, zgaduję że wyjdzie więcej spritów do rysowania bo bloków trawy będzie więcej niż ludzików.

Ale podzielenie trawy na takie 4 czy nawet 5 warstw w poziomie byłoby chyba najładniejsze 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×