Skocz do zawartości

Szyk w strategii top-down


Rekomendowane odpowiedzi

Dzień dobry

mógłby ktoś pomóc? Chciałbym w strategicznej top-downowej grze dać możliwość zbierania jednostek w szyk, chociażby w prostokąt. Załóżmy że zwykły ludek ma 4x4 piksele, i jak zrobić żeby się tak ładnie organizowali w prostokąt bez żadnych przerw między żołnierzykami? I przycisk w stylu "rozwiąż szyk" który sprawi że się rozdzielą tak żeby każdy stał przynajmniej 2 piksele od innego.

Aha, no i dobrze by było żeby przy tworzeniu szyku ludki automatycznie dobierali wielkość prostokąta do tego ilu ich jest, żeby na przykład przy 15 ludziach tworzyli prostokąt 5x3.

Odnośnik do komentarza
Udostępnij na innych stronach

calkiem prosty sposob(trza go dostosowac do twych potrzeb i napisac kod :) ) :

0, vybor jednostek

1, polecam przechowywac id vybranych jednostek v datowych strukturach jako so ds_ (viz help)

2, ilosc_linii_v_oddzialu = sqrt(_suma_vybranych_jedn) viz. help

3, licbza_zlonierzy_v_linii = ceil(suma_vybranych_zolnierzy/ilosc_linii_v_oddzialu) viz..help

4, wykonaj for dla ilosc_linii_v_oddzialu i v nim for dla licbza_zolnierzy_v_linii i kazdej jednostce zapisz jej miejsce v oddzialu (linia, mijsce v linii)

5, niezapomnij, dla 4, jest wazne by testowac exystencjezolnierzy bo niezawsze vybierzesz oddzial o pelnych linijach :)

6, jak na umiescienie jednostki na pozicje v oddziale

7, definuj punkt/instancji vodza, ktory trzyma pozycje calego odzialu i wszystci zolnierze trzymajo swo relatywno pozycje dla tego punktu/instancji

8, vylic relatiwno pozycje(offset) kazdego zolnierzy i zapisz go do zolnierza, tu mozesz aplikowac dowolno przerwe jak v miedzy linijami tak i miezdi z

9, kazdy zolnierz od teraz ma zmienac swe x,y na instnancja_vodza.x+jednostka.x_offset etc.

 

napisalem z glowy, ale chyba nic waznego nieopominolem :)

 

obroty oddzialu so jak od 6, tylko v 8, liczysz pozicje uwzglendniajoc direction instancja_vodza i uzywajoc sin/cos

 

moze niejest to co chcesz takie proste, jak sobie wyobrazales, ale nic bez pracy niema wartosci. :thumbsup:

Odnośnik do komentarza
Udostępnij na innych stronach

Mozesz wybrac jedna z instancji w szyku jako prowadzacego, stojacego z przodu, kazdej kolejnej instacji nadawac numer w szyku (0,1,2,3,4....) oraz podawac id prowadzacego.

Wtedy pozycja danej jednostki to bedzie

 

GML
x = wodz.x - (dlugosci_linii/2*sprite_width) + (sprite_width*(numer mod dlugosc_linii));

y = wodz.y + sprite_height + ( numer div dlugosc_linii );

 

Ereg podał jak wyliczyć długość lini.

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