Platyna Opublikowano 7 Grudnia 2007 Udostępnij Opublikowano 7 Grudnia 2007 Witam Mam takie pytanie: Jeśli mam jakiś kąt docelowy i kąt aktualny to jak zrobić by on wybierał w którą stronę ma się obrócić by dotrzeć do docelowego (tak by było mu bliżej). Czyli jeśli: aktualny - 90 docelowy 0 to muszę zmniejszać image_angle a aktualny 59 docelowy 92 to ma zwiększać image_angle Ale nie można tego załatwić zwykłym if(cel>image_angle) image_angle+=1 else image_angle-=1 bo gdybym tak robił to w przypadku aktualny 0 docelowy 350 zaczą by dodawać image_angle i obracać się o całe 350 stopni zamiast o tylko 10 w tronę przeciwną :/ Wie ktoś jak to załatwić? Z góry dzięki :thumbsup: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Shockah Opublikowano 7 Grudnia 2007 Udostępnij Opublikowano 7 Grudnia 2007 directionto = point_direction(x,y,obj_monster.x,obj_monster.y); if direction > directionto then direction -= 6; if direction < directionto then direction += 6; if direction > 360 then direction -= 360; if direction < 0 then direction += 360; image_angle = direction; Trochę zmieniony kod kompasu z mojej gry (a żem wtedy wymyślił, że kompas pokazuje najbliższego wroga :D ). U mnie działało dobrze. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 7 Grudnia 2007 Autor Udostępnij Opublikowano 7 Grudnia 2007 To co żeś napisał to dokładnie to samo co ja powiedziałem że jest złe. No bo pomyśl. gdy igła twojego kompasu zechce obrócić się do 350 z pozycji 10 to wykona obrót 340 (350>10) zamiast 20 w drugą stronę :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 7 Grudnia 2007 Autor Udostępnij Opublikowano 7 Grudnia 2007 Myślałem, że to nie będzie dla forumowiczów problemem, a tu widzę że na razie nikt nie potrafi mi pomóc :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 7 Grudnia 2007 Udostępnij Opublikowano 7 Grudnia 2007 pokombinuje... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 7 Grudnia 2007 Udostępnij Opublikowano 7 Grudnia 2007 Phi! Tez mi problem... -.- stworz skrypt: direction_check_near o kodzie: // argument0 - aktualny direction // argument1 - docelowy direction var temp_a,temp_b; temp_a=abs(argument1-argument0) temp_b=abs(argument1-argument0+360) if(temp_a<temp_b)return(1) if!(temp_a<temp_b)return(-1) funkcja zwraca 1 gdy jest najblizej wartosci dodatnio zorientowanej, zas -1 gdy ujemnie zorientowanej (byc moze nie zrozumiesz). Przyklad wykorzystania: dir1=10 dir2=350 dir1+=direction_check_near(dir1,dir2)*10 Powinno dzialac ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 7 Grudnia 2007 Autor Udostępnij Opublikowano 7 Grudnia 2007 Nie działa. Nie zawsze obraca się w tą krótszą stroną. Czasem w tą w którą mu dalej. Chyba niczego nie sknociłem w tym co mi dałeś: if(image_angle!=(round(dir/5))*5) { temp_a=abs(dir-image_angle) temp_b=abs(dir-image_angle+360) if(temp_a<temp_b) image_angle+=5 else image_angle-=5 if(image_angle>360) image_angle-=360 else if(image_angle<0) image_angle+=360 } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 7 Grudnia 2007 Udostępnij Opublikowano 7 Grudnia 2007 Gdy jest napisane STWORZ SKRYPT to postepujemy zgodnie z instrukcja i go tworzymy. Po to jest on by bylo latwiej -.- Powinno dzialac, zreszta zaraz sprawdze Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 7 Grudnia 2007 Autor Udostępnij Opublikowano 7 Grudnia 2007 Weź to nawet przeanalizuj dla tych przykładowych wartości 10 i 350. Powinien obracać się w prawo czyli odejmować od image_angle. temp_a=350-10=340 temp_b=350-10+360=700 340<700 (temp_a<temp_b) if(temp_a<temp_b)return(1) Sam widzisz że źle :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 7 Grudnia 2007 Udostępnij Opublikowano 7 Grudnia 2007 faktycznie, dopiero sprawdzilem :P ale co za problem pokombinowac z tym? Ja teraz nie mam czasu, przykro mi Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 7 Grudnia 2007 Autor Udostępnij Opublikowano 7 Grudnia 2007 Już się nakombinowałem i mam dość... -_- Widzę że to trudniejsze zagadnienie niż mi się z początku wydawało... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 7 Grudnia 2007 Udostępnij Opublikowano 7 Grudnia 2007 Dobra, jak widze twoje podejscie do sprawy to az mi sie zal robi... Zaraz dostaniesz rozwiazanie, ale na przyszlosc nie poddawaj sie na trudnych przeszkodach, bo w zyciu nic nie zrobisz Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 7 Grudnia 2007 Autor Udostępnij Opublikowano 7 Grudnia 2007 Jak bym miał się poddawać to wiesz... Tak dla twojej wiadomości od przynajmniej 5 godzin się nad tym zastanawiam więc chyba mam prawo do odrobiny odrzucenia od tego przynajmniej na 2 godzinki... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pentalinio Opublikowano 7 Grudnia 2007 Udostępnij Opublikowano 7 Grudnia 2007 Eee... Nie zrozumiałem ? ;o if ( direction < cel ) direction = min( cel, direction + 6 ); else if ( direction > cel ) direction = max( cel, direction - 6 ); Hmm.. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 7 Grudnia 2007 Administratorzy Udostępnij Opublikowano 7 Grudnia 2007 Myślałem, że to nie będzie dla forumowiczów problemem, a tu widzę że na razie nikt nie potrafi mi pomóc :( dopiero co dostałeś jedno ostrzeżenie, już chcesz kolejne ? drugi raz w ciągu jednego dnia łamiesz regulamin - pisząc dwa posty pod rząd. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matthew Opublikowano 7 Grudnia 2007 Udostępnij Opublikowano 7 Grudnia 2007 Hmm... Też miałem taki problem, ale nie potrafiłem (Tymonowi XD) wytłumaczyć o co mi chodzi XD Teraz jak mam sporo doświadczenia to mogę pokombinować. Dam edita jak coś wykminię... alfa = 10 beta = 350 To są te kąty. a - odległość przeciwna do ruchu wskazówek zegara b - odległość zgodna z ruchem wskazówek zegara a = beta - alfa = 350 - 10 = 340 b = 360 - beta + alfa = 360 - 350 + 10 = 10 + 10 = 20 a > b Więc poruszamy się zgodnie z RWZ jeśli a < b to poruszamy się przeciwnie do RWZ Tak więc mniej więcej kod będzie wyglądał tak: alfa = image_angle; beta = cel; if (beta = 0) beta = 360; a = beta - alfa; b = 360 - beta + alfa; if (a>b) image_angle -= 4; if (a<b) image_angle += 4; poprawione Dodaj jeszcze gdzieś w stepie if (image_angle>=360) image_angle -= 360; if (cel>=360) cel -= 360; Teoretycznie... Nie mogę na tym kompie tego sprawdzić, bo coś się roztegowało (jakiś plik został usunięty) i nie działaja niektóre programy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 7 Grudnia 2007 Udostępnij Opublikowano 7 Grudnia 2007 W create coś takiego (Wartości sam ustal) mp_potential_settings(10,10,0,0) W step: mp_potential_step(obj_wrog.x,obj_wrog.y,0,true) image_angle = direction i to cała filozofia :) Pokombinuj trochę z tymi wartościami w mp_potential_settings żeby Ci pasowały pozdrawiam Uzjel ;) EDIT: No i przykład - taki trochę na odwal - ale pokazuje to co trzeba ;) Przykład - OxGames Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 7 Grudnia 2007 Autor Udostępnij Opublikowano 7 Grudnia 2007 Matthew, twój kod nie był całkowicie dobry, a wręcz był niedobry, ale to twój sposób myślenia mnie doprowadził do rozwiązania. Problem rozwiązany dziękuję wszystkim za pomoc :) A gnyska chciałbym przeprosić. Już nie będę. Nawet nie zauważyłem, że dostałem to ostrzeżenie i do tej pory bym nie wiedział jak byś mi znów uwagi nie zwrócił, tak więc przepraszam i dziękuję jeszcze raz wszystkim :) 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ę