Mind Opublikowano 19 Listopada 2016 Udostępnij Opublikowano 19 Listopada 2016 Witam, jestem w trakcie robienia projektu, w którym niestety nie mogę się obejść za bardzo bez sprawdzania czy dana liczba leży w danym przedziale. Dam przykład(y): Sprawdzanie czy różnica kierunku od danego punktu jest większa niż powiedzmy 30 (w systemie koła 0-360, tak jakby różnica kątu), próbowałem w ten sposób: GML var pd=point_direction(x,y,obiekt.x,obiekt.y) if direction>pd { if direction!=direction-pd>30 { if speed>3 speed-=1 direction-=5 } else if speed<c_speed (c_speed = jego wcześniejsza wartość speed) speed+=1 } i na odwrót z pd>direction Niestety to nie zadziałało, obiekt zaczynał chodzić w kółko, nie mógł znaleźć momentu w którym różnica kierunku będzie większa niż 30 Np. gdy robiłem przedział przy pobieraniu kolorów barw z RGB, sprawdzałem czy kolor jest czerwony, zrobiłem to w ten sposób: GML if (r>200 and g<50 and b<50) Pytanie jest jedno, czy jest może jakaś wbudowana funkcja do sprawdzania przedziału? Jeśli nie, w jaki sposób zrobić to najbardziej optymalnie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 19 Listopada 2016 Udostępnij Opublikowano 19 Listopada 2016 Różnica z kierunkiem jest zawiłym zadaniem bo pomiędzy 355 a 5 jest różnica 10. Ale na szczęście GM:S ma już od tego funkcję: angle_difference() Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
candy Opublikowano 19 Listopada 2016 Udostępnij Opublikowano 19 Listopada 2016 Proponuję GML var pd=point_direction(x,y,obiekt.x,obiekt.y) if(abs(pd-direction)>30) direction+=sign(pd-direction)*5; Kod w ogóle nie sprawdza czy idzie po mniejszym czy większym kącie. To już zostawiam Tobie ;D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mind Opublikowano 19 Listopada 2016 Autor Udostępnij Opublikowano 19 Listopada 2016 @Threef mam 8'mke :) @candy - dziękuję, będę rozkminiał :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 19 Listopada 2016 Administratorzy Udostępnij Opublikowano 19 Listopada 2016 Kolejny co ma GM8, jak GM:S jest w sumie za darmo, a pełna wersja była ostatnio za 30 złotych. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 19 Listopada 2016 Udostępnij Opublikowano 19 Listopada 2016 Skoro nie mozesz uzyc funckji bo masz GM8.. Może istnieją lepsze rozwiązania niż to, to walnąłem na szybkiego ale zasada jest taka: GML // val1 i val2 to kąty Roznica = min(max(val1,val2)-min(val1,val2),min(val1,val2) + (360-max(val1,val2)) ) EDIT: Teoretycznie wydajniejsza wersja GML (getangledifference) var a0 = min(argument0,argument1); var a1 = max(argument0,argument1); return (min(a1-a0,a0+(360-a1))); Ogólna idea jest taka, że sprawdzamy odległość z obu stron, więc w jednej opcji lecimy zgodnie ze wskazówkami zegara(tak jak kąt się zwiększa - robimy max-min) a w drugiej zgodnie ze wskazówkami zegara(kąt malejący, tutaj do mniejszego kąta dodajemy odległość większego kąta od 360). Funkcją min wybieramy krótszy kąt. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 20 Listopada 2016 Administratorzy Udostępnij Opublikowano 20 Listopada 2016 http://www.gmlscripts.com/script/angle_difference Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę