Skocz do zawartości

Heksagonalna plansza


Rekomendowane odpowiedzi

  • Tytuł: Heksagonalna plansza
  • Krótki opis: Reprezentacja gridem (tablicą dwuwymiarową), rysowanie i znajdowanie pozycji myszki dla planszy heksagonalnej.
  • Wersja: GM:S, zalecany co najmniej Standard*
  • Pliki: Projekt (*.rar zawierający *.gmz, do otwarcia przez "Import Project"; ok. 2,8 MB)

    Exek (ok. 1,8 MB, na górze po prawej jest FPS i współrzędne obecnego pola, strzałkami ogląda się planszę, pole nad którym jest myszka podświetla się; nie jest to to specjalnie fascynujące)

  • Screen: [LINK]

 

Przykład zawiera następujące elementy:

- reprezentacja gridem (tablicą dwuwymiarową): w tym przykładzie oś X przebiega w prawo i w dół (pod kątem 30 stopni), a oś Y w lewo i w dół, co można zauważyć po numerkach współrzędnych; uznałam, że taka konwencja sprawdza się najlepiej (czyt. akurat tak mi się podobało)

- rysowanie planszy: tj. rysowanie klatek pewnego sprite'a po wielokroć, która klatka to zależy od wartości pola w planszy; po narysowaniu wszystkich właściwych pól jeszcze jest rysowanie na tym konturów; rysowanie napisano w ten sposób, że wyświetlane są tylko elementy konieczne; nawet dla planszy zawierającej 10000x10000 elementów szybkość rysowania zasadniczo się nie zmienia

- przewijanie planszy: można sprawdzić korzystając ze strzałek; nie musisz mieć gigantycznego rooma, żeby wyświetlić wszystko, czego chcesz!

(technicznie rzecz biorąc room i tak jest z założenia w miarę nieskończony, ale można to załatwić i w ten sposóB)

- znajdowanie pozycji myszki: obiekt rysujący planszę rozpoznaje współrzędne pola, nad którym obecnie jest myszka korzystając z matematyki takiej i owej; aktualna pozycja myszki jest przechowywana w zmiennych fx i fy (nazwanych bodajże po "focus x" i "focus y") i to do nich należy się odwoływać po wykonaniu zdarzenia Step odpowiedniego obiektu

 

Póki co zrobiłam wyżej wymienione elementy mechaniki. Jeśli ktoś jest bardzo zainteresowany bardziej szczegółowym tutorialem ilustrującym jak to działa (i pewnie też tłumaczącym do czego służą poszczególne zmienne w przykładzie :P ) lub nowymi funkcjami, to proszę pisać; nie mam specjalnie ochoty robić nie wiadomo jakich fajerwerków jeśli okaże się, że i tak nie ma na nie zapotrzebowania. ;)

 

*sam przykład korzysta ze struktury "grid" dostępnej tylko w płatnej wersji, natomiast można to podmienić na tablicę dwuwymiarą jak ktoś naprawdę bardzo chce

Odnośnik do komentarza
Udostępnij na innych stronach

sam przykład korzysta ze struktury "grid" dostępnej tylko w płatnej wersji, natomiast można to podmienić na tablicę dwuwymiarą jak ktoś naprawdę bardzo chce

Czyli tak, raczej powinno działać na darmowym GM:S. O ile dobrze pamiętam, jedyne wystąpienia funkcji grida to Create, User Event 1 i Draw (przy czym user event jest stosowane tylko przy zmianie rozmiaru siatki). Zresztą, jak pominiesz którąś funkcję niedarmową, to pewnie od razu GM:S zacznie ci jojczyć przy uruchomieniu. ;)

Przy okazji, tam są stosowane zmienne "width" i "height"; teoretycznie powinny odpowiadać rozmiarom grida, ale w tym przypadku chyba najlepiej w ogóle zamienić tworzenie grida i wywołanie User Event 1 na:

GML
width = /*szerokość*/; height = /*wysokość*/;

for (i=0; i<width; i++) {

for (j=0; j<height; j++) {

source[i, j] = 0; //albo coś

}

}

Mam nadzieję, że przejście od grida na tablicę dwuwymiarową nie sprawi zbyt wielu problemów? ^^'

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