Skocz do zawartości

Rekomendowane odpowiedzi

na stronie gmclan jest przykład na pole widzenia top down. ma on jednak błąd, bo przy pewnym ustawieniu mimo znajdowania się w polu przeciwnik nas nie widzi. Da się to jakoś naprawić? Sam kombinowałem właśnie w ten sposób zanim znalazłem przykład, ale nie umiem tego dopracować.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Myślę że najpierw powinieneś zamieścić link do przykładu i podać na jakiej wersji game makera pracujesz:)
I przy "pewnym ustawieniu", o jakie dokładnie chodzi?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Przykład był pisany 14 lat temu. Sporo się pozmieniało i jak pozostałe przykłady służy do nauki nie jest gotowym rozwiązaniem.

 

Zadaj konkretne pytanie jaki jest problem

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
dla przeciwnika step:

if !collision_line(round(x),round(y),round(obj_player.x),round(obj_player.y),obj_wall,1,1) 
{     {
        dir = point_direction(round(x),round(y),round(obj_player.x),round(obj_player.y));
        
        if dir > direction - (max_angle/2)
        && dir < direction + (max_angle/2) 
        {            widzi=1  ;        }
                          else widzi=0
        
    }
}else widzi=0                 

max_angle - kąt widzenia = 160

przy directionie przeciwnika 0,  direction - (max_angle/2) = -80. jeśli dir = 350 to przeciwnik nas nie widzi, mimo że jesteśmy w polu.

póki zakres pola widzenia jest >0 jest ok.

czy można to jakoś łatwo naprawić? czy robić każdemu przeciwnikowi obiekt w kształcie pola widzenia i badać czy gracz wchodzi z nim w kolizje i nie ma ściany między nim a przeciwnikiem?

 

wolałbym to rozwiązać w miarę możliwości GM8. ewentualnie GMS1.4

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

W nowszych GM (chyba od 8.1) możesz zastąpić

if dir > direction - (max_angle/2)
        && dir < direction + (max_angle/2) 

przez 

if angle_difference(dir, direction) < max_angle

To powinno rozwiązać problemy z "dziwnymi" wartościami direction

 

I pamietaj aby najpierw sprawdzać direction a dopiero potem collision_line(), bo ten drugi jest "cięższy dla procesora" więc chcesz go sprawdzać tylko gdy pierwszy warunek już jest spełniony

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Drugi sposób to zapewne zrobić

direction = direction % 360;

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Po co te zaokrąglenia? wow

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

×