Skocz do zawartości

ładny, okrągły timer


Chell

Rekomendowane odpowiedzi

  • Filar Społeczności

no to ten, chciałbym zrobić ładny, nowoczesny timer odliczający ile jeszcze zostało czasu zanim gracz będzie mógł oddać kolejny strzał. Coś w tym stylu, i miałby się wypełniać, wiecie o co chodzi?

timer.png

nie mam pojęcia jak się do tego zabrać, ręcznie animował to będę do kwietnia, a skodzić coś takiego to ja nie umiem. Pomożecie?

 

edit: w sumie to mam GM:S, ale przyzwyczaiłem się do pisanai w tym dziale, za wiele to nie zmienia

Odnośnik do komentarza
Udostępnij na innych stronach

Najprostrze rozwiazanie:

GML
draw_set_color(kolor_wskazowki);

draw_line(srodek_kola_x,srodek_kola_y,srodek_kola_x + (sin(degtorad(360 * (ile_czasu_zostalo / ile_czasu_max)))*promien),srodek_kola_y - (cos(degtorad(360 * (ile_czasu_zostalo / ile_czasu_max)))*promien));

 

Pojedyncza linia, ale wykombinujesz jak dalej to zrobic.

Odnośnik do komentarza
Udostępnij na innych stronach

SSpgBul.gif

 

GML
ilosc_punktow = 64;

draw_primitive_begin(pr_trianglefan);

draw_vertex(srodek_kola_x, srodek_kola_y);

for ( var i = 0; i <= ilosc_punktow; i++ )

{

if ( (ile_czasu_zostalo / ile_czasu_max) >= (i / ilosc_punktow) )

draw_vertex(srodek_kola_x + (sin(degtorad(360 * (i / ilosc_punktow)))*promien),

srodek_kola_y - (cos(degtorad(360 * (i / ilosc_punktow)))*promien) );

}

draw_primitive_end();

 

Tylko że wskazówka porusza się skokowo.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Jak chcesz płynnie, to zoptymalizowałem - działa nawet z ułamkowymi częsciami:

 

GML
ilosc_punktow = 24;

draw_primitive_begin(pr_trianglefan);

draw_vertex(srodek_kola_x, srodek_kola_y);

for ( var i = 0; i < (ile_czasu_zostalo / ile_czasu_max) * 360; i+= (360 / ilosc_punktow) )

{

draw_vertex(srodek_kola_x + (dsin(i)*promien),

srodek_kola_y - (dcos(i)*promien) );

}

 

i = (ile_czasu_zostalo / ile_czasu_max) * 360;

draw_vertex(srodek_kola_x + (dsin(i)*promien),

srodek_kola_y - (dcos(i)*promien) );

 

 

draw_primitive_end();

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Od lutego :) http://www.yoyogames.com/tech_blog/49

 

 

Edit: to o czym często się zapomina, że pętla for nie musi się zmieniać o 1. Zatem jeśli rysujemy coś w kole, w 10 krokach, to i nie musi się zwiększać o 1 od 0-10, a może o 36 od 0 do 360 :) Do niedawna też o tym często zapominałem, a potem człowiek w forze w każdym kroku np. przemnaża (powiedzmy rysuję menu). Bez sensu, jeśli to "i" nie jest nam potrzebne żeby wiedzieć który to element (a tutaj nie jest).

Odnośnik do komentarza
Udostępnij na innych stronach

Musiałem otexturować xD

kpcXWj1.gif

GML
ilosc_punktow = 24;

draw_set_color(c_white);

 

draw_primitive_begin_texture(pr_trianglefan, tex);

draw_vertex_texture(srodek_kola_x, srodek_kola_y, 0.5, 0.5);

for ( var i = 0; i < (ile_czasu_zostalo / ile_czasu_max) * 360; i+= (360 / ilosc_punktow) )

{

draw_vertex_texture(srodek_kola_x + (dsin(i)*promien),

srodek_kola_y - (dcos(i)*promien), 0.5+dsin(i)*0.5, 0.5-dcos(i)*0.5 );

}

i = (ile_czasu_zostalo / ile_czasu_max) * 360;

draw_vertex_texture(srodek_kola_x + (dsin(i)*promien),

srodek_kola_y - (dcos(i)*promien), 0.5+dsin(i)*0.5, 0.5-dcos(i)*0.5 );

draw_primitive_end();

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Przy sprite, to można chyba ilość punktów jeszcze zmniejszyć, do momentu, aż nie będzie efektu przeskakiwania ostatniego vertexu gdy dodaje się kolejny trójkącik. No i można użyć sprite jak na górze - paska :)

Odnośnik do komentarza
Udostępnij na innych stronach

W połączeniu z GLSL możesz zoptymalizować ilość tych trójkątów do dwóch. Cała magia polega na operowaniu na texcoordach we fragment shaderze. Gdzieś widziałem na forum pewną implementację pomysłu Physixa, po paru modyfikacjach zadziałałoby tak jak sobie tego zażyczyłbyś ;)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Ja już wczoraj szukałem coś o shaderach, ale są takie długie rozwiązania że nawet nie chcę próbować tego zrozumieć... A jak już napisałem, w powyższym kodzie jak się podstawi sprite z pierwszego postu to będzie efekt taki jak zamierzony.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

W Unity mają taki shader "cutoff" i obrazek z alphą pomaga wyciąć, ale za cholerę nie potrafiłbym tego przenieść:

 

http://forum.unity3d.com/threads/health-ba...13/#post-276508

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