[XP][RGSS] Pole widzenia eventów

Jeśli chcesz podzielić się swoimi materiałami z innymi użytkownikami forum.

Moderatorzy: GameBoy, Dragon Kamillo

Awatar użytkownika
GameBoy

Golden Forki 2009 - Pełne Wersje (miejsce 1); Puchar Ligi Mapperów II (zwycięstwo); TA Sprite Contest 6 (miejsce 3)(miejsce 3)
Posty: 1769
Rejestracja: 11 lip 2009, 13:47
Lokalizacja: Wieluń

Re: [XP][RGSS] Pole widzenia eventów

Post autor: GameBoy »

A co robi skrypt gdy bohater bedzie stał na tym polu z terrain tagiem.
Chodzi o taką sytuację?
Szczerze to nie mam pojęcia, bo skrypt pisałem z założeniem, że do takiej sytuacji nigdy nie dojdzie, ale zapewne nie jest wtedy widoczny w ogóle.
Chodzi o to żeby przeciwnik widział naszego bohatera kiedy stoi na pierwszym z kolejności od przeciwnika polu z terrain tagiem.
Zauważ, że te rozwiązanie też ma spore wady - jeśli gracz i event ułożą się równolegle do ściany o kącie 45 stopni to gracz nie zostanie zauważony.
Znów mamy do czynienia z większym błędem po naprawie mniejszego.
Awatar użytkownika
Lyserg1260
Posty: 159
Rejestracja: 13 sty 2014, 00:03
Lokalizacja: Katowice

Re: [XP][RGSS] Pole widzenia eventów

Post autor: Lyserg1260 »

A co z tą moją metodą? Ona chyba nie doda żadnego błędu?
Awatar użytkownika
Dragon Kamillo

Golden Forki 2016 - Pełne Wersje (miejsce 3); Golden Forki 2013 - Zapowiedzi (zwycięstwo); Liga Mapperów Sezon IV (miejsce 2)
Posty: 1948
Rejestracja: 18 paź 2009, 21:23
Lokalizacja: Poznań/Granowiec

Re: [XP][RGSS] Pole widzenia eventów

Post autor: Dragon Kamillo »

No dobra jest to wada.

Ale jakby połączyć moje rozwiązanie z rozwiązaniem Lyserga:
A więc tak kolor żółty to inny terrain tag, jak którego skrypt napotka to sprawdza od następnej "rysowanej" kratki te dwie po bokach, jeśli obie są na nie widzi - przerywa sprawdzanie, jeśli chociaż jedna jest na widzi - sprawdza dalej.

To wymagało by zapisanie współrzędnych tej pierwszej napotkanej kratki (x1,y1) z terrain tagiem (nie tym blokującym) i następnej(x2,y2), potem od współrzędnych tej pierwszej odjąć tej drugiej i sprawdzić kratki: (x2+(x1-x2), y2) i (x2, y2+(y1-y2)) - myślę że się nie pomyliłem.
Awatar użytkownika
GameBoy

Golden Forki 2009 - Pełne Wersje (miejsce 1); Puchar Ligi Mapperów II (zwycięstwo); TA Sprite Contest 6 (miejsce 3)(miejsce 3)
Posty: 1769
Rejestracja: 11 lip 2009, 13:47
Lokalizacja: Wieluń

Re: [XP][RGSS] Pole widzenia eventów

Post autor: GameBoy »

To wymagało by zapisanie współrzędnych tej pierwszej napotkanej kratki (x1,y1) z terrain tagiem (nie tym blokującym)
Tylko nie jestem pewien czy da się sprawdzić, czy dany tile jest zablokowany czy nie.
Mimo wszystko metoda Lyserga będzie chyba najlepsza, bo nie trzeba budować mapy w określony sposób (czego chciałeś raczej uniknąć), nie trzeba zapisywać żadnych współrzędnych etc.

Wystarczy tylko określić na początku położenie gracza względem eventu, w której ćwiartce układu współrzędnych o środku o współrzędnych równych lokacji eventu (można pominąć sprawdzanie zupełnie jeśli gracz znajduje się centralnie w linii prostej przed eventem) i potem dodać tylko sprawdzenie odpowiednich kratek obok piksela rysowanej linii.
Jutro może się tym zajmę.
Awatar użytkownika
Lyserg1260
Posty: 159
Rejestracja: 13 sty 2014, 00:03
Lokalizacja: Katowice

Re: [XP][RGSS] Pole widzenia eventów

Post autor: Lyserg1260 »

Mógłbyś przy okazji też dodać ten pierwszy warunek o który pytałem? Ten z przyleganiem do ściany. Raczej nie będzie to problem i chyba najlepiej by był sprawdzony na początku, zanim skrypt zacznie sprawdzać pola. Przed sprawdzaniem sprawdzi czy różnica współrzędnych X = 1 i różnica współrzędnych Y = 1 i czy któreś z pól z 2 sąsiednich dla obu zdarzeń pól ma terrain tag i wtedy zwraca FALSE, w przeciwnym razie zaczyna dopiero sprawdzanie tych pól wszystkich. No i żeby sprawdzało to przyleganie najlepiej dla Switcha jakiegoś. Nie jest to wprawdzie idealne rozwiązanie ale powinno wystarczyć na moje potrzeby.

Taki szkic warunku mniej więcej

|x| - wartości bezwzględne
&& - AND
|| - OR
a metody itp. są zmyślone, po prostu chodzi mi o pokazanie sensu tego.

Kod: Zaznacz cały

px=player.x
py=player.y
ex=event.x
ey=event.y

if switch == true
   if (|px-ex|==1 && |px-ey|==1) && (pole(px,ey).tag==ustalony_tag || pole(ex,py).tag==ustalony_tag)
      return false
   end
end

...
INSTRUKCJE DALSZE (SPRAWDZANIE PÓL)
EDIT:
nie jest idealny dlatego
Spoiler:
EDIT2:
Jeszcze jedno pytanie, dałoby radę w jakiś sposób zablokować widzenie dla eventa? Bo jak dasz np. event między Tobą a wrogiem, to on Cie widzi. Chciałbym mieć możliwość zablokowania tego (dla konkretnych eventów powiedzmy, np. dodając komentarz jakiś w tym evencie).
Niech za przykład poruszy ruchoma skrzynia za którą musimy się chować, a ona się porusza.

Jak tam, coś ruszyło w tej sprawie? Jeśli nie to spróbuje sam to sobie zrobić na eventach (najlepiej common żeby nie musieć kopiować to do każdego). Tylko nie wiem jak z wydajnością.
ODPOWIEDZ