Skocz do zawartości

Ślizganie po ścianach


Qubatron15

Rekomendowane odpowiedzi

Witam!

Od jakiegoś miesiąca tworzę jedną grę, jednakże trafiłem na problem, któego nie potrfafię rozwiązać. Jest on następujący:

Poruszanie bohaterem oparłem na zasadzie funkcji jump_to_position, tzn. gdy wciśniety jest klawisz W, obiekt bohatera przeskakuje o 3 lub o 8 pikseli w górę (zależnie od tego czy trzymany jest jednocześnie klawisz SHIFT czy też nie). Kłopot jest w tym, że nie mam pojęcia, jak zrobić, by bohater "ślizgał się" po ścianach, gdy wpadnie na nie pod kątem różnym od prostego. Szukałam rozwiązania na forum i znalazłem takowe:

 

COLLISION obiektu bohatera (obj_player) ze ścianą obj_wall_vertical:

if(keyboard_check(ord('A')) && place_free(x-jump,y))
{
    x=x+jump;  //jump to zmienna długości skoku (przyjmuje wartość 3 lub 8)
}
if(keyboard_check(ord('D')) && place_free(x+jump,y))
{
    x=x-jump;
}
if(keyboard_check(ord('W')) && place_free(x,y-jump))
{
    y=y+jump;
}
if(keyboard_check(ord('S')) && place_free(x,y+jump))
{
    y=y-jump;
}

Działa jednak ono niezgodnie z oczekiwaniami, a konkretnie, gdy obj_player wpadnie na ścianę obj_wall_vertical, to zatrzymuje się i już. Nie można nim ruszyć w żadną stronę, dopóki nie odkleimy się od ściany.

Był bym wdzięczny za pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie chciałem zakladać nowego tematu. Ma ktoś pomysł, jak mogę sprawić, by obiekt obj_spider wykonał akcje co klatke (konkretnie zwiększenie wartości zmiennej o 1) będąc w kolizji z obiektem obj_seeing_front, ale jednocześnie NIE BEDĄC w kolicji z obiektem obj_shadow? Wykonałem to w ten sposłb:

 

COLLISION obiektu obj_spider z obiektem obj_seeing_front:

if(distance_to_object(obj_shadow)>0)
{
    fear_timer+=1;
}

 

Nie działa to jednak poprawnie, gdyż akcja ta wykonuje się wtedy, gdy obj_spider jest w odległości ok. 150 pikseli od obj_shadow. Jeśli ma to znaczenie, to obj_shadow w trakcie gry obraca się i ma kształt prostokąta z osią obrotu znajdującą się na krótszej krawędzi.

Odnośnik do komentarza
Udostępnij na innych stronach

A mógłby ktoś powiedzieć, jak z tej funkcji powinienem skorzystać? Przejżałem juz chyba całe foru i tutoriale ale nie znalazłem pomocy. W Help`ie z GM też jest niewiele. Jeśłi dobrze rozumiem:

 

collision_point(x,y,obj,prec,notme)

gdzie:

x, y - współrzędne miejsca kolizji (w moim przypadku obj_spider.x, obj_spider.y)

obj - obiekt, z któym wykrywamy kolizję (w moim przypadku obj_shadow)

prec, notme - nie mam pojęcia, co oznaczają te parametry.

 

I by wykryć brak kolizji powinienem stworzyć następujacego if'a:

if(collision_point(x,y,obj,prec,notme)==false)
{
<akcja>
}

 

Dobrze to rozumiem?

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