libnds #2 Piszemy intro – timery

 

Wziąłem się za ustawienie środkowiska pod libnds (nie będę w końcu pisał całej gry w vimie). Pobrałem CLiona, żeby mieć ze sobą wszystkie najlepsze udogodnienia z Intellij którego używam na codzień do Javy – problem w tym, że CLion nie ma wersji community, jedynie 30 dniowy trial. Trzeba będzie pojanuszować i ściągać ponownie za miesiąc (jakoś nie mam ochoty na wydawanie 200€ na rok).

Wrzuciłem też gotowy projekt na githuba, teraz można śledzić progress:

https://github.com/dbeef/spelunky-ds

Co chcemy osiągnąć:

introScreen z intra Spelunky

Na start gry, zdanie po zdaniu, z interwałem ~2.5s, odkrywane są kolejne linie intra. Chcemy napisać klasę, która będzie odpowiedzialna za takie przerywniki.

Za szablon wziąłem sobie plik z przykładów devkitPro/examples/nds/Graphics/Printing/customFont.

To jest miejsce w którym zapoznam się z timerami w libnds. Każda z linii pojawia się co określony odstęp czasu, który trzeba sobie odliczyć. Z tego co znalazłem w docsach i wypróbowałem, za odliczanie czasu odpowiada specjalny układ na płytce DSa, a właściwie jeden z czterech układów, w zależności który wybierzemy.

Start i zatrzymanie układu wygląda następująco:

Screenshot from 2018-02-21 12-44-41

Wygląda to tak:

  • w pierwszym argumencie podajemy który timer używać
  • w drugim podajemy jakiego dzielnika używać, czytaj – co jaki czas ma być naliczany ‘tick’ timera
  • trzeci – liczba ticków która musi minąć, zanim bufor timera się przepełni
  • funkcja która ma być wywołana w momencie, kiedy bufor się przepełni

Przykładowo, napisałem taki kod, który ma za zadanie co około sekundę wypisać na konsolę NDS czas  jaki upłynął (wytłumaczenie w komentarzach):

Screenshot from 2018-02-21 13-06-10

Efekt wygląda tak:

myimage

Wracając więc do tego co mamy zrobić, to inicjalizujemy zmienne int trzymające wartości czasu w milisekundach i zdejmujemy z nich upłynięty czas. Jeśli upłynął i nie ustawiliśmy jeszcze flagi ‘narysowano’, to wywołujemy funkcję wypisującą na konsolę i ustawiamy flagę na 1. Robimy tak dla każdej z trzech linii.

Timery dla każdej z linii ustawiłem jako tablicę:

{1000, 3500, 6000}

Z czego można się domyślić, że pierwsza linia wyskoczy po sekundzie, druga po 3.5, trzecia po 6.

Efekt:

myimage

 


 

Linki:

https://devkitpro.org/viewtopic.php?f=6&t=1622

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s