Ta strona stosuje pliki cookies. Poczytaj co to jest w polityka cookies



Tworzenie gier 2D i 3D
Animacja 2d
Grafika 3D
Tworzenie muzyki

Kącik początkującego

Gimp Jak sterować postacią w grze?

     W uprzednim artykule utworzyliśmy proste sterowanie postacią. Było ono jednak mocno uproszczone, dziś zajmiemy się poprawą nawigacji postacią w prawym kierunku...

corona_sdk_53.jpg    Uproszczone sterowanie polegało na tym, że po kliknięciu w prawo nasz duszek był przesuwany o 10 pikseli w prawo i była uruchamiana jedna animacja lotu ptaka. Zatem, by przesunąć naszego bohatera o kolejny krok w prawo musieliśmy dotknać/kliknąć ponownie w przycisk w prawo. Takie sterowanie do wygodnych nie należy...

Spróbujmy teraz sprawić, by postać przemieszczała się w prawo dotąd aż puścimy przycisk "w prawo". By nie zaciemniać przekazu nie będę kopiował całego kodu a jedynie tam, gdzie nastąpiły zmiany.

function przesun_prawo(event
    if 
event.phase=="began" 
then  
        przesun_w_prawo
=
1
        ptak
:prepare("latanie"

        
ptak:play
()
    
end
    
if event.phase=="ended" 
then 
       przesun_w_prawo
=0  
      
ptak:prepare("latanie")
       
ptak:pause
()
    
end
end 

function przesun
()
  if 
przesun_w_prawo==
1 then
     ptak
.x=ptak.x+
1
  end
end

prawo
:addEventListener("touch",  przesun_prawo

Runtime:addEventListener("enterFrame"przesun
 

 Zmian jest trochę.

  •  Funkcja przesuń w prawo teraz już nie przesuwa bezpośrednio naszej postaci lecz ustawia zmienną przesun_w_prawo na 1, gdy button jest wciśnięty i uruchamia w tym czasie animację ptaka.
    Dodatkowo w funkcji tej też sprawdzany jest warunek upuszenia przycisku, który zmienia zmienną przesun_w_prawo na 0 a także resetuje animację poprzez: ptak:prepare("latanie") oraz włącza pauzę animacji: ptak:pause().

    Początkowo, gdy nie dałem funkcji prepare("latanie") animacja ptaka zatrzymywała mi się w różnych pozach po puszczeniu przycisku co niekiedy mogłoby być niedopuszczalne, np. nie jest naturalne, by ludzik zatrzymywał się z jedną nogą z przodu a drugą z tyłu jak przy chodzie, czy skoku. Wystarczy popatrzeć na siebie - gdy się zatrzymujemy to z reguły wracamy do pozycji stojącej a jesteśmy zaawansowanej fazie skoku...

  • nowością jest tu bardzo prosta funkcja przesun(), która sprawdza, czy przycisk jest wciśnięty czyli przesun_w_prawo jest ustawione na 1 a wtedy przesuwa nasz obiekt o 1 piksel w prawo. W przeciwnym razie nie robi już nic.

  • kolejną nowością jest dodanie nowego śledzenia zdarzenia, które wywoływane jest w zależności od ustawień 30 bądź też 60 razy na sekundę i  z taką częstotliwością wywołuje funkcję przesun. Dzieje się to wszystko dzięki temu, że zdarzenie "enterFrame" jest wywoływane regularnie i dzięki temu możemy wykorzystać tą właściwość do periodialnych działań w naszej grze co się bardzo często przydaje.

  • chyba ostatnią rzeczą, która została zmieniona (dotyczy kodu powyżej funkcji) to zmiana
    sprite.add(lecacy_ptak_set, "latanie", 1, 6, 500, 1)
    na
    sprite.add(lecacy_ptak_set, "latanie", 1, 6, 500, 0) - czyli ostatnia cyfra została zmieniona z 1 na zero, co oznacza, że lecący ptak ma lecieć w nieskończoność, gdy uruchomimy go play'em no chyba, że go zpauzujemy poleceniem pause() co z resztą czynimy.

(Nie)Oczekiwane błędy programistyczne

    Jak to w życiu programisty bywa - coś wydaje się, że działa ale niestety po jakimś czasie okazuje się, że nie do końca. Otóż w tej wersji, gdy klikniemy na przycisku "w prawo" przesuniemy palec i odpuścimy ale poza guzikiem to ptak nadal będzie leciał czyli nie nastąpi pauza.

Jak rozwiązać ten problem?

    Trzeba dołożyć kolejne śledzenie zdarzenia "touch" ale poza obiektem prawo i tam przenieść obsługę upuszczenia. Dzięki takiemu rozwiązaniu nie będzie nam groźne przypadkowe lub celowe przesunięcie palca czy myszki i upuszczenie poza naszym śledzonym obiektem. Rozwiązanie zostawiam państwu do samodzielnego rozwiązania.

Czytaj dalej: Wirtualny joystick - sterowanie postacią
Warning: include_once(includes/rss_fetch.php) [function.include-once]: failed to open stream: No such file or directory in /home/ekoinst/domains/pcwiedza.pl/public_html/tworzenie-gier/includes/funkcje.php on line 548

Warning: include_once() [function.include]: Failed opening 'includes/rss_fetch.php' for inclusion (include_path='.:/opt/alt/php52/usr/share/pear:/opt/alt/php52/usr/share/php') in /home/ekoinst/domains/pcwiedza.pl/public_html/tworzenie-gier/includes/funkcje.php on line 548

Różne

copyright © Pcwiedza.pl