Skocz do zawartości

Reprezentacja punktu będącego poza ekranem


Exigo

Rekomendowane odpowiedzi

Niektóre gry mają fajny sposób informowania gracza o pozycji obiektu, celu, czegokolwiek ważnego, mimo że nie widzimy tego "w rzeczywistości" (tzn. jest poza ekranem). Dobrym przykładem było by przytoczenie GTA, gdzie strzałeczki pokazywały kierunek do głównych celi znajdując się wokół gracza.

 

Mi natomiast chodzi o reprezentację w taki sposób, aby symbole pokazywane były na krawędzi, nie w kole, ale dostosowując się do rozmiaru i proporcji okna. Tzn. w pewnym sensie "punkt dążący od środka ekranu, do celu, zatrzymywany przez krawędź okna". Rozrysowałem to mniej więcej tak:

Bez_nazwy_17a70b.png

 

Jakiś pomysł, jak to napisać? ; )

Odnośnik do komentarza
Udostępnij na innych stronach

Tak na szybko.

GML
cx = room_width / 2;

cy = room_height / 2;

 

tx = mouse_x;

ty = mouse_y;

 

dir = point_direction( cx, cy, tx, ty );

dis = point_distance( cx, cy, tx, ty );

 

draw_sprite( sprite, 0,

cx + max( -cx, min( cx, lengthdir_x( dis, dir ) ) ),

cy + max( -cy, min(cy, lengthdir_y( dis, dir ) ) ),

);

Odnośnik do komentarza
Udostępnij na innych stronach

Tymuś, Tymuś! Wyobraź sobie, że się mylisz, zły człowieku. Nie możesz obliczać pozycji x i y niezależnie od siebie. Jeśli ogranicza nas przykładowo prawa krawędź to przesunięcie w y też trzeba odpowiednio skrócić.

 

Nie ma rady. Trzeba ifnąć przypadki, która krawędź nas ogranicza, albo sprawdzić czy bardziej przeskalowało w x czy w y i w ten sam sposób przeskalować drugą współrzędną. Uno momento...

EDIT:

 

Tadam!

GML
cx = room_width / 2;

cy = room_height / 2;

 

tx = mouse_x;

ty = mouse_y;

 

dir = point_direction( cx, cy, tx, ty );

dis = point_distance( cx, cy, tx, ty );

dx = lengthdir_x( dis, dir );

dy = lengthdir_y( dis, dir );

d2x = max(-cx, min(cx, dx));

d2y = max(-cy, min(cy, dy));

 

if(dx == 0) scale = d2y/dy;

else if(dy == 0) scale = d2x/dx;

else scale = min(d2x/dx, d2y/dy);

 

newx = cx+scale*dx;

newy = cy+scale*dy;

draw_arrow( cx, cy, newx, newy, 5);

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