Skocz do zawartości

Ruch po grid-zie i wykrywanie kolizji


7ed

Rekomendowane odpowiedzi

Witam. Zaczynam kombinować z GML w GMS.

Staram się stworzyć system poruszania oparty o grid z wykrywaniem kolizji i szczerze mówiąc nie wiem jak połączyć place_empty z kierunkiem w stopniach + speed.

Czy może ktoś coś zasugerować?

Samo poruszanie się jest bardzo proste jak na razie:

 

 if keyboard_check(ord("W")) {
     if (place_snapped(32,32)){
         motion_set(90,32);
     }
}
if keyboard_check(ord("S")) {
     if (place_snapped(32,32)){
         motion_set(270,32);
     }
}
if keyboard_check(ord("D")) {
     if (place_snapped(32,32)){
         motion_set(0,32);
     }
}
if keyboard_check(ord("A")) {
     if (place_snapped(32,32)){
         motion_set(180,32);
     }
}

else {
     motion_set(0,0);
     }

Odnośnik do komentarza
Udostępnij na innych stronach

Fakt, nie pomyślałem xD

A pytanie z innej beczki.

Mam obiekt z losowym ruchel (losowanie wartości z przedziału 1-4 i przypisane kierunki do nich).

Obiekt wystepuje w wielu instancjach w room-ie.

Pierwszy umieszczony porusza się ok, pozostałe pozostają bez ruchu (chyba, że obiekt zostanie zniszczony to następny w kolejności umieszczania zaczyna reagować na skrypt).

Jak mozna zmusić wszystkie obiekty do losowego ruchu? Każdy osobo nie ten sam kierunek (oczywiście zawsze używam self przy zmiennych w losowaniu)

Odnośnik do komentarza
Udostępnij na innych stronach

Tak też robiłem i niestety efekt ten sam. Cały kod ruchu jest zawarty w step zawsze.

kierunek=0;
losuj=random_range(1,5);
if losuj>=0 && losuj<2 {
    kierunek = 0;
    }
if losuj>=2 && losuj<3 {
    kierunek = 90;
    }
if losuj>=3 && losuj<4 {
    kierunek = 180;
    }
if losuj>=4 {
    kierunek = 270;
    }
    if place_snapped(32,32) {
        motion_set(kierunek,32);
    }
else {
motion_set(0,0);
}

Sam ruch działa poprawnie. Niestety tylko na pierwszy umieszczony obiekt.

Odnośnik do komentarza
Udostępnij na innych stronach

Ten sam kod:

GML
kierunek = irandom_range(0,3)*90 //albo: kierunek = choose(0,90,180,270)

//mozesz przejrzec powyzsze funkcje w dokumentacji

if(place_snapped(32,32)) motion_set(kierunek,32)

Fragment motion_set(0,0) całkowicie zatrzymuje obiekt, jest on zbędny, jak myślę.

Odnośnik do komentarza
Udostępnij na innych stronach

Skorzystam, każda skrócona wersja jest mile widziana.

motion_set(0,0) - to jest element od czegoś jeszcze. Będzie docelowo na zmianę między ruchem postaci a wrogów. Coś typu tury i chodzi o ruch na zasadzie krok ja krok przeciwnik.

 

A jak to wygląda w kwestii ruchu tylko jednego obiektu?

Przykładowo umieszczam przeciwnika 3x na mapie, ale właśnie tylko jeden się porusza.

Powiem szczerze, że coś tam majstruje w GMS od grudnia ale przez brak czasu szło to opornie i raczej były to inne rozwiązania.

Sam jestem na co dzień przyzwyczajony raczej do webdev niż GML ;]

 

[edit]

Powyższe już nie ważne. Już wiem co i jak ;]

Mam inne pytanie.

Ruch obiekty będącego teoretycznym przeciwnikiem (obiektów w sumie) już działa poprawnie ale wykrywanie kolizji coś zawodzi.

kod poniżej prosty lecz do testu wystarczający

kierunek = irandom_range(0,3)*90

if kierunek = 0 {
    check = place_empty(x+32,y);
    }
if kierunek = 90 {
    check = place_empty(x,y-32);
    }
if kierunek = 180 {
    check = place_empty(x-32,y);
    }
if kierunek = 270 {
    check = place_empty(x,y+32);
    }
    
if global.player_turn = false {
if(place_snapped(32,32) && check) motion_set(kierunek,32) global.obiekty=-1;
} else {motion_set(0,0)}

 

1. motion_set(0,0) tu ma zastosowanie. Zatrzymuje kiedy trzeba obiekty i ładnie działa.

2. global.obiekty i global.player_turn - tu bez znaczenia. Część czegoś zewnętrznego.

3. problem z wykrywaniem kolizji - czasem obiekty "głupieją" i wchodzą w ścianę (solid) lub przechodzą przez nią poza room i nie wiem szczerze dlaczego.

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