Skocz do zawartości

lengthdir i lagi w poruszaniu


Rekomendowane odpowiedzi

Witam.

W mojej grze Asteroids TUTAJ jest możliwość złapania dodatkowego członu statku. Gdy to nastąpi doczepia się on do tylu kadłuba i porusza (obraca) się razem z głównym członem.

Problem polega na tym, że w momencie przyspieszenia ten dodatkowy człon jak gdyby reaguje trochę później i zostaje minimalnie w tyle. Tak jakby był doczepiony jakąś gumową liną.

Szukałem na forum i nie mogę znaleźć tematu w którym ktoś miał podobny problem i doradzono mu żeby rysował oba obiekty w END STEP lub DRAW. I tu właśnie moje pytanie.

Jak sprawić aby oba obiekty były ze sobą połączone w taki sposób żeby nie było widać tych opóźnień podczas przyspieszania.

 

W obiekcie STATEk mam STEP i kod:

 

GML
//przyspieszenie

if(keyboard_check(vk_up))

{

motion_add(kierunek, 0.5)

image_index=1;

}

else

image_index=0;

 

W obiekcie STATEK2 mam STEP i kod:

 

GML
//jeśli są połączone

if(polaczenie)

{

x=statek.x+lengthdir_x(25,statek.image_angle-180);

y=statek.y+lengthdir_y(25,statek.image_angle-180);

image_angle=statek.kierunek;

}

 

Mam nadzięję, że nie zagmatwałem tego za dużo.

Odnośnik do komentarza
Udostępnij na innych stronach

przenieś kod ze stepa do begin stepa albo end stepa to już wyjdzie samo ;) lub do drawa ale tylko w przypadku kiedy używasz 1 viewa. Bo draw wykonuje się tyle razy na 1 klatkę gry ile jest aktywnych viewów. ( więc na marne by się wtedy miało zmieniać parokrotnie, taka mała kwestia optymalizacyjna :P )

Odnośnik do komentarza
Udostępnij na innych stronach

Wielkie dzięki za szybką pomoc.

Poradziłem sobie w taki sposób.

Za poradą HuderLord'a:

w obiekcie STATEK zmieniłem STEP na BEGIN STEP.

w obiekcie STATEK2 zmieniłem STEP na END STEP do wyliczenia x, y, i image_angle względem obiektu STATEK po połączeniu.

Dzięki sugestii kt1117 do STATKU2 dodałem EVENT DRAW i w nim rysowałem spritea w ten sposób:

GML
draw_sprite_ext(sprite_index,-1,x,y,1,1,image_angle,c_white,1);

 

Musiałem tak zrobić ponieważ przeniesienie warunku:

GML
if(polaczenie)

{

draw_sprite_ext(sprite_index,0,statek.x+lengthdir_x(25,statek.image_angle-180),statek.y+lengthdir_y(25,statek.image_angle-180),1,1,statek.image_angle,c_white,1);

}

do DRAW po połączeniu podczas strzelania pociski ze STATKU2 pojawiały się w miejscu przejęcia obiektu (połączenia), a nie w aktualnej pozycji.

Przy okazji poprawiłem sobie TARCZE która też miała lekkie opóźnienia w pozycji w stosunku do STATKU.

Jeszcze raz dziękuję za pomoc i pozdrawiam.

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