tomasz_76 Opublikowano 28 Maja 2014 Udostępnij Opublikowano 28 Maja 2014 Hej Napisałem mały programik do mojej gry ale mam problem z koordynatami. za każdym razem kiedy zwiększę prędkość to obiekt piłka czerwona robi inny luk. tzn nie trzyma się takiej samej trajektorii. dam przykład. Startuje z punktu x=100 y=100 i następuje skręt na pozycje y2=320 przy prędkości 0 to działa dobrze, ale gdy prędkość wynosi 1 to już y2 ma np. 640.. gdy prędkość jest 2 to y2 ma znow inaczej w każdym bądź razie za każdym razem są inne współrzędne y2 i obiekt nie trafia na wcześniej ustalona pozycje jaka jest przy prędkości 0. moze macie pojecie jak to ugrysc. Czy dalo by się zoptymalizować skrypt skrety bo tracę "moc obliczeniowa" gdy mam np. 500 obiektów. skrypt skrety if korekta=1 then {y=a;x=b; direction=direct;exit} // gdy korekta osiągnie 32 wtedy wykonana jest ostatnia operacja if korekta=2 then {y=a;x=b; direction=direct;exit} if korekta=3 then {y=a;x=b; direction=direct;exit} if korekta=4 then {y=a;x=b; direction=direct;exit} if korekta=5 then {y=a;x=b; direction=direct;exit} if korekta=6 then {y=a;x=b; direction=direct;exit} if korekta=7 then {y=a;x=b; direction=direct;exit} if korekta=8 then {x=a;x=b; direction=direct;exit} if korekta=9 then {y=a;x=b; direction=direct;exit} if korekta=10 then {y=a;x=b; direction=direct;exit} if korekta=11 then {y=a;x=b; direction=direct;exit} if korekta=12 then {y=a;x=b; direction=direct;exit} if korekta=13 then {y=a;x=b; direction=direct;exit} if korekta=14 then {y=a;x=b; direction=direct;exit} if korekta=15 then {y=a;x=b; direction=direct;exit} if korekta=16 then {y=a;x=b; direction=direct;exit} if korekta=17 then {y=a;x=b; direction=direct;exit} if korekta=18 then {y=a;x=b; direction=direct;exit} if korekta=19 then {y=a;x=b; direction=direct;exit} if korekta=20 then {y=a;x=b; direction=direct;exit} if korekta=21 then {y=a;x=b; direction=direct;exit} if korekta=22 then {y=a;x=b; direction=direct;exit} if korekta=23 then {y=a;x=b; direction=direct;exit} if korekta=24 then {y=a;x=b; direction=direct;exit} if korekta=25 then {y=a;x=b; direction=direct;exit} if korekta=26 then {y=a;x=b; direction=direct;exit} if korekta=27 then {y=a;x=b; direction=direct;exit} if korekta=28 then {y=a;x=b; direction=direct;exit} if korekta=29 then {y=a;x=b; direction=direct;exit} if korekta=30 then {y=a;x=b; direction=direct;exit} if korekta=31 then {;exit} if korekta=32 then {y=pomoc_y;x=pomoc_x;korekta=0;exit} zmienna pomoc_y i pomoc_x sluzy do wpasowania obiektu do wspolrzedej x320 ---------------------obiekt pilka czerwona, create------------- predkosc=0 y=100 x=100 -----------------obiekt pilka czerwona, step-------------- if(keyboard_check_pressed(ord("D"))) then predkosc+= 1; // jezeli nacisne d to ma przyspieszyc o 1 if(keyboard_check_pressed(ord("A"))) then predkosc-= 1; // jezeli nacisne a to ma zwolnic o 1 if kierunek_jazdy=0 and nazwa='obj_pilka_czerwona' then {korekta=korekta+1;a=y+10;b=x+5;pomoc_x=x+0;pomoc_y=y+15;direct=direction-3;src_skrety() // wiazd z lewej strony na dol... z okrecaniem sie o 3 stopnie } if kierunek_jazdy=1 and nazwa='obj_pilka_czerwona' then {korekta=korekta+1;a=y-10;b=x-5;pomoc_x=x-1;pomoc_y=y-5;;direct=direction+3;src_skrety() // wiazd z dolu na lewa strone... z okrecaniem sie o 3 stopnie } ------------obiekt pilka czerwona sekcja draw----------- speed=predkosc/room_speed; draw_sprite_ext(nazwa,0,x,y,1,1,direction,c_white,1); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 28 Maja 2014 Administratorzy Udostępnij Opublikowano 28 Maja 2014 A to nie wynika z matematyki, ze jak prędkośc jest 2x większa, to 2x większa odległość zostanie pokonana? Poza tym WSTYDŹ SIĘ ZA TEN KOD. Pierwsze 30 linijek można zmienić w jedną. Nie bardzo rozumime co chcesz osiągnąc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tomasz_76 Opublikowano 28 Maja 2014 Autor Udostępnij Opublikowano 28 Maja 2014 Chodzi o to ze na ekranie mam duzo obiektow i chcialbym aby kilka z nich poruszalo sie z prędkością np 1 nastepnie kilka z prędkością 2 itd.. ale najwaznisze zeby współrzędne poruszania byly te same. Zgadzam sie skrypt jest straszny i musze go zmienić tylko ze jak dam if korekta> 31 then {y=a;x=b; direction=direct;exit} to i tak poza zmniejszeniem kodu nie przyspieszy nic......... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 28 Maja 2014 Administratorzy Udostępnij Opublikowano 28 Maja 2014 Współrzędne poruszania? Jak dasz ten sam kierunek, to będą w nim się poruszać z odpowiednią prędkością. Do tego wystarczy: direction = <wartosc>; speed = <wartosc>; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tomasz_76 Opublikowano 28 Maja 2014 Autor Udostępnij Opublikowano 28 Maja 2014 no tak... tylko ze docelowe współrzędne już będą inne. A jak mam dużo obiektów to ciężko skontrolować wszystkie.. nie ma jakiegoś hmm polecenia lub funkcji która by robiła automatyczna korektę ze jak prędkość jest 1 to piłka z x=100 y=100 przesunie się do docelowego x2=320 y2=320 w 10 sec z krokiem 33 a jak będzie prędkość 3 to już w 3.3 sec z krokiem 33 i zachowaniu tych samych współrzędnych początkowych i docelowych. Bo jak na razie to te docelowe współrzędne mi uciekają . A piłka porusza się po przekątnych kwadratu z okręcaniem się o 90 stopni co 1 krok. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 28 Maja 2014 Udostępnij Opublikowano 28 Maja 2014 lerp() Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tomasz_76 Opublikowano 28 Maja 2014 Autor Udostępnij Opublikowano 28 Maja 2014 hmm.... poczytałem troszkę o tej funkcji... wydaje się ze o nią właśnie chodzi... teraz tylko trzeba zastosować to do mojej piłki. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 28 Maja 2014 Administratorzy Udostępnij Opublikowano 28 Maja 2014 Może ty chcesz po prostu interpolację liniową ? I wtedy procentowo ustalasz, jak daleko od celu się jest 0 - 1 (przypominam, ze 1% to 1/100 = 0.01). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tomasz_76 Opublikowano 28 Maja 2014 Autor Udostępnij Opublikowano 28 Maja 2014 bo ja wiem co to ta interpolacja liniowa... nie mam na tyle wiedzy żeby ja zastosować... po prostu chce żeby niezależnie ile zwiększę szybkość to piłka będzie się "turlać" z punktu x i y 100 do punktu x i y 320 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 28 Maja 2014 Udostępnij Opublikowano 28 Maja 2014 mam nadzieje ze polapalem o co ci chodzi :) 1, chyba mozna uzyc tez path z roznymi szybkoscami. muszis definowac patch. objekty tylkko potem wedlod niego sie ruszajo dano szybkoco, kazdy tak samo. 2, iterpolacja, potrzebuje umiec wyliczyc kazdy punkt trasy pilky w dowolnej chvili wtedy ustalasz wedlod szybkosci ile % z trasy juz pilka przesla i liczysz odpowiedno pozicje jest to podobne do 1,, ale prace odwala za ciebie GM 3, mozna tez uzyc 2, tak ze raz wyliczysz sobie calo trase(jesli sie niezmienia), nastepnie umiesczas do datowej structury i uzywazs 2, na pobieranie konkretnej wspolrzendnej z datowej structury wedlog aktualnego postepu w % pilky na trasie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tomasz_76 Opublikowano 29 Maja 2014 Autor Udostępnij Opublikowano 29 Maja 2014 to ma sens.. jeżeli użyję 2 to w tedy będę mógł zmienić prędkość w dowolnej chwili i piłka będzie na swoim miejscu..sprawdzę ile już przebyła i ile jej zostało i jak zmieni się szybkość to tylko trzeba będzie skoordynować współrzędne które zostały względem prędkości.. . Ereg Ty masz łeb :-) :-). mam nadzieje ze uda mi się to zrobić. Dziękuję za naprowadzenie :) 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ę