Skocz do zawartości

Czy myszka jest w wielokącie?


XivroX

Rekomendowane odpowiedzi

Witam :sp_ike:

Czy macie może jakiś skrypt, ew. istnieje taka funkcja, która sprawdzi, czy kursor myszki znajduje się w wielokącie?

W prostokącie wyglądałby (ten skrypt) tak:

GML
if(mouse_x>=x1)

&&(mouse_x<=x2)

&&(mouse_y>=y1)

&&(mouse_x<=y2)

{return true;}

else

{return false;}

ale poszukuję kodu na wielokąt, tak jak tutaj (to co ma zwracać funkcja):

taknie.png

ach ten cudowny paint xD

Może to nie będą, aż tak oryginalne wielokąty, ale sześcio- siedmioboki będą.

Z góry dziękuję :thumbsup:

(wiem, że to baaardzo łatwe (dla niektórych, nie mnie), więc jeżeli to nie ten dział, to proszę przenieść)

Odnośnik do komentarza
Udostępnij na innych stronach

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

O wyznaczniki macierzy, własnie z tego oblałem studia :P Ja to bym zrobił w paincie sprite i użył place_free, a jak chcesz sie bawić w bardziej zaawansowane obliczenia, to miłej zabawy :)

Odnośnik do komentarza
Udostępnij na innych stronach

Ja to bym zrobił w paincie sprite i użył place_free

Gorzej jak kształt się dynamicznie zmienia, wtedy pozostaje to, bo będzie i tak szybsze niż robienie nowego sprite'a co klatke

Odnośnik do komentarza
Udostępnij na innych stronach

niee! tylko nie matematyka! jak ja nienawidzę matematyki! xD

nie ma jakichś łatwiejszych sposobów?

co do

Gorzej jak kształt się dynamicznie zmienia, wtedy pozostaje to, bo będzie i tak szybsze niż robienie nowego sprite'a co klatke

to kształt nie będzie się dynamicznie zmieniał, będzie stały.

To miało być raczej proste: Zwróć true, jeżeli kursor znajduje się wewnątrz wielokąta.

Odnośnik do komentarza
Udostępnij na innych stronach

I co dalej? Zrobiłem funkcją draw_sprite, i jak już narysuję, to co dalej mam zrobić? W ogóle odwołać się do tego nie mogę. Obiektów nie mogę użyć, bo, musiałbym ich w jednym roomie ustawić kilkadziesiąt, w niektórych roomach nawet kilkaset (!), a wiadomo, że tyle obiektów może tak obniżyć FPSy, że głowa mała. W tym, co mi dał Psychix trochę się orientuję, lecz nadal nie mam pojęcia jak to zaaplikować do GMa, jeżeli ktoś podpowiedziałby mi praktycznie co mam zrobić (gdyż teoretycznie to akurat umiem) to byłbym wdzięczny. Czekam też na dalsze odpowiedzi :*

Odnośnik do komentarza
Udostępnij na innych stronach

Właśnie sie nie mylisz, o tym już gnysek mówił, ale kolega XivroX widać tego nie zauważył :)

Odnośnik do komentarza
Udostępnij na innych stronach

problem w tym , że jakbym chciał mieć pełno obiektów to bym już dawno to zrobił =/ szukam jakiegoś innego sposobu na np. taki skrypt: podaję x i y wszystkch boków wielokąta, a on mi wylicza, czy kursor zawiera się w tym wielokącie czy nie... ehh... chyba jednak będę zmuszony gwałtownie obniżyć fpsy =/

Odnośnik do komentarza
Udostępnij na innych stronach

XivroX, zeby sprawdzac kolizje nie musisz rysowac sprite'a, wystarczy ze nadasz obiektowi maske, rownoczesnie nie dajac mu zadnego sprite'a. sprawdzanie kolizji w tym przypadku nie wplynie widocznie na fps, no chyba ze takich obiektow chcesz miec multum. Powiedz lepiej jak wygladac ma sytuacja w grze to sie dopasuje metode

Odnośnik do komentarza
Udostępnij na innych stronach

Więc tak...

W roomie ma być kilkadziesiąt / kilkaset (biedne FPSy) różnych wielokątów różnych kolorów (w takiej niewidzialnej tabelce - każdy w jednej niewidzialnej kratce). Po najechaniu myszką na jeden z tych kilkudziesięciu /kilkuset wielokątów, ten zmienia kolor, a po naciśnięciu wykonuje się akcja (taka sama dla wszystkich) - kolor może być trzymany w tablicy 2wymiarowej. Nawet się nie ważcie pytać po co mi to, to nie będzie miało sensu ;x

Odnośnik do komentarza
Udostępnij na innych stronach

Albo maluj na surface'ie i sprawdzaj surface_getpixel().

 

Ewentualnie ja bym to zrobił tak - zapisał wielobok jako kilka trójkątów (albo zrobił automatyczny podział) i sprawdzał kolizję osobno z każdym z trójkątów (oczywiście, dzieląc je jakby na trzy trójkąty i porównując pola - chyba wiecie, o co mi chozi...?).

Nie mówię, że to jest dobre, ale ja bm to najpierw zrobił :P

Odnośnik do komentarza
Udostępnij na innych stronach

hmm, jeśli każda instancja każdego kształtu miałaby inny kolor kluczowy to wtedy pomysł z surface zadziała, wtedy podczas wykrywania id danej instancji z jaka koliduje punkt będzie wyliczał id z koloru danego pobranego pixela, dodawał te 100000 (+/- jedno zero, nie pamietam) od ktorych zaczyna numeracje instancji i wtedy bedzie mozna miec w roomie do 255^3 instancji. oczywiscie na jednym surfaces mozna rysowac ksztalty z kolorem wlasnie wyliczanym na podstawie id (tak jak to przed chwila opisalem) a drugi surfaces do juz wlasciwego rysowania figur, ktore maja byc widoczne.

 

A pomysl z dzieleniem ksztaltow na trojkaty, ktore jeszcze raz zostana podzielone na kolejne trojkaty, nie bedzie najlepszym (w tym przypadku najszybszym) rozwiazaniem, juz lepiej skozystac z tego algorytmu do ktorego opisu dalem wczesniej link :P

Odnośnik do komentarza
Udostępnij na innych stronach

Kalkulatory tez ktos zaprogramowal, a kazdy szanujacy sie programista powinien upodobac sobie matematyke, a jak nie upodobac to po prostu przemoc sie do niej ;)

Odnośnik do komentarza
Udostępnij na innych stronach

to chyba te objecty to jedyny porządny sposób. ;[ można temat zamknąć, bo sobie tu ludy posta nabijają :] no chyba, że ktoś zna odpowiedź inną od tych wymienionych...

 

@up

Naprawdę? : O ! Jakoś nie widziałem abym się uczył na matmie "Co to jest i do czego służy funkcja instance_create() ?"

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