Skocz do zawartości

regulacja prędkości skrętu oraz optymalizacja kodu


Rekomendowane odpowiedzi

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

  • Administratorzy

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

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

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

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

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

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