Skocz do zawartości

Platformy


Jaklub

Rekomendowane odpowiedzi

każdy musi czasem zadać głupie pytanie. co prawda nie uważam siebie za początkującego w GMie, ale uważam, że to zagadnienie zdecydowanie nie powinno się znaleźć w forum Pytania zaawansowanych (patrzcie i uczcie się!). oczekuję więc w miarę szybkiej odpowiedzi (ale tych, którzy powiedzą coś nieciekawego, tylko żeby powiedzieć, mogę zmieszać z błotem, zanim coś trzaśniecie, lepiej to przemyślcie). :D tych, którzy mnie wyprowadzą z błędu, czeka złoto, chwała, pieniądze, laski, creditsy, itp. itd.

do rzeczy:

GML
if place_meeting(argument0,argument1,wall_obj)

return 0;

else

if place_meeting(argument0,argument1,passthrough_obj)

{

th=instance_place(argument0,argument1,passthrough_obj);

if floor(y)<th.y

return 0;

}

else

return 1;

ten przepiękny, lecz niedziałający kod ma być swoistą alternatywą na place_free. problem z tym, że obiektów passthrough_obj (platform, na które można wchodzić od dołu) to nie wykrywa, choć wydaje mi się, że powinno. przecież jeśli y postaci (dodam, że jej origin nie leży w środku lub lewym górnym rogu, lecz na dole) to 30, a platformy 32, powinno zwrócić 0 i jej nie przepuścić. a bohater przelatuje - i od góry, i od dołu. i ja się pytam: dlaczemu... ekhm... dlaczego? passthrough_obj ma maskę.

halp plz

Odnośnik do komentarza
Udostępnij na innych stronach

Chcesz zrobić aby postać wskakiwała na platformy od dołu, tak? Możesz to napisać tak:

GML (step platforma)
if(y-o_gracz.y>jakas wartosc)//gracz jest wyzej niz platforma

solid=true;

else

solid=false;

Musisz pokombinować z wartością w if. Nie wiem jakie masz wymiary spritów. Oczywiście najlepiej byłoby gdybyś centrował origin. Wtedy możesz if zamienić na uniwersalny i wrzucić do script'a, aby nie powtarzać kodu, który będzie różnił się tylko wartością.

Odnośnik do komentarza
Udostępnij na innych stronach

Chcesz zrobić aby postać wskakiwała na platformy od dołu, tak? Możesz to napisać tak:

GML (step platforma)
if(y-o_gracz.y>jakas wartosc)//gracz jest wyzej niz platforma

solid=true;

else

solid=false;

Musisz pokombinować z wartością w if. Nie wiem jakie masz wymiary spritów. Oczywiście najlepiej byłoby gdybyś centrował origin. Wtedy możesz if zamienić na uniwersalny i wrzucić do script'a, aby nie powtarzać kodu, który będzie różnił się tylko wartością.

solidy nie wchodzą w grę. po pierwsze, są przez nie problemy z pozycjami i przemieszczaniem, po drugie, potrzebuję więcej postaci przeskakujących przez te platformy niż jedna. dlatego chcę to zawrzeć w skrypcie podobnym w użyciu do place_free. przestawiać originów także nie zamierzam, bo origin na dole maski jest po prostu wygodnym rozwiązaniem (image_angle i tak nie używam).

Odnośnik do komentarza
Udostępnij na innych stronach

Pytasz się dlaczego ten scrypt zwraca ci jedynkę. Spójź:

 

1. screen Czerwony klocek to player, origin y ma ustawiony na samym dole, niebieski klocek to twój passthrough jego origin jest na samej górze. Podkereślona zmienna na fioletowo th zmieni swój stan gdy dojdzie do kolizji ( index -4 ma object noone )

 

Pierwszy screen, do kolizji nie doszło widać że jest po między nimi przestrzeń 1 pixela, w tym momencie gdyby do kolizji doszło to twój scrypt zwrócił by ZERO bo jak widzisz y gracza jest mniejszy od th.y

http://a.imageshack.us/img831/4820/73921424.png

 

2. Schodzimy pixel w dół, teraz przysiągł byś że doszło do kolizji bo widzisz że postać stoi na bloczku jednak nic takiego się nie dzieje bo kolizja jest wykrywana dopiero w momencie kiedy bloki się na siebie nakładają. Już teraz nawet gdyby doszło do kolizji to scrypt zwrócił by jedynkę bo y gracza jest == th.y

http://a.imageshack.us/img842/3479/73395007.png

 

3. Schodzimy kolejny pixel w dół, teraz doszło do kolizji, jednak jest już po ptokach bo y gracza jest większy od th.y

http://a.imageshack.us/img245/4601/13560293.png

 

Wniosek jest taki że gdzie by nie był gracz to scrypt zawsze zwróci jedynkę. ( no chyba że gracz natrafi na wall_obj )

Odnośnik do komentarza
Udostępnij na innych stronach

o, widzę, że chciało ci się to wszystko sprawdzać. dzięki za to. faktycznie, działa, gdy jest mniejsze lub RÓWNE y.

creditsy ar jors.

 

ps. używam tylko stepów (a właściwie user eventów, ale wywoływanych jak step) po to, żeby móc łatwo dorobić online.

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