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 poruszać obiekt po okręgu?

    Gdy wejdziemy głębiej w programowanie gier to możemy się spotkać z problemem jak poruszać obiektem wokół okręgu. Wbrew pozorom nie jest to takie oczywiste jakby się to mogło wydawać na początku.

    Programując przyzwyczailiśmy się do tego, że większość funkcji mamy podane na tacy i gdy potrzebujemy wyświetlić okrąg wystarczy wywołać funkcję z podaniem długości promienia i punktu środka okręgu. Dobrze a co jeśli chcemy uzyskać możliwość poruszania obiektu po okręgu? Wtedy trzeba wyznaczyć wszystkie te punkty, które znajdują się w odległości równej promieniowi wokół środka.

Trzeba zatem spróbować narysować okrąg samemu a to już nie jest tak łatwe jak wywołanie gotowej funkcji.

Inspirację do rozwiązania problemu znalazłem na stronach:

  • katalogi.pl/75684-pascalruch-po-okr%C4%99gu.html
  • moskat.pl/szkola/matematyka/b_trygonometria.php
  • edu.i-lo.tarnow.pl/inf/utils/002_roz/2008_23.php

Tak. Trzeba niekiedy szukać w różnych miejscach i nie tracić czasu na wyważanie otwartych już drzwi.

Idea rozwiązania

    Gdybyśmy pewien odcinek (promień) obracali wokoło punktu zero osi układu współrzędnych i na jego końcu rysowali punkcik np. na czerwono to przy pełnym obrocie o 360stopni otrzymamy okrąg! To jest to czego szukamy.

Ludzie proponują tu, by wykorzystać prawo pitagorasa i funkcji trygonometrycznych w trójkącie prostokątnym, by obliczyć przyprostokątne, czyli iksa i igreka.

Zatem sinus (kąta)=a/c a cosinus(kąta) = b/c. Zatem z ogólnie znanych wzorów możemy wyliczyć:

x=a=c*sin(kąta)

y=b=c*cos(kąta)

a- to przyprostokątna trójkąta

b - to druga przyprostokątna trójkąta.

Zatem przemianowując a i b na x i y na osi współrzędnych otrzymujemy punkt w którym będzie się znajdował koniec promienia czyli przeciwprostokątna trójkąta dla danego kąta.

Podsumowując - dla każdego kąta możemy wyliczyć punkt w którym znajduje się koniec promienia, czyli gdzie trzeba umieścić nasz obiekt, by poruszał się po okręgu.

Dodanie przesunięcia względem osi X i Y

Gdybyśmy chcieli przesunąć obiekt nieco w prawo i w dół, by był widoczny na smartfonie to wystarczy nieco zmodyfikować nasze wzory na x i y:

x=x0+c*sin(kąta)
y=y0+c*cos(kąta)

corona_sdk_84.jpg

Jeśli uruchomimy niżej przytoczony program (oczywiście musimy mieć wgrane zdjęcie z piłką) to obiekt będzie poruszał się po okręgu o zadanym promieniu wokół punktu początkowego o współrzędnych P(srodek_x, srodek_y).

 

local pilka_plazowa_mala display.newImage("pilka_plazowa_mala.png")

        
srodek_x=
250
        srodek_y
=
250
        pilka_plazowa_mala
.x=
srodek_x
        pilka_plazowa_mala
.y=
srodek_y          

        i
=
0
        promien
=
200

function przesun
()         
          
pilka_plazowa_mala.x=srodek_x+promien*math.sin(i
)
          
pilka_plazowa_mala.y=srodek_y+promien*math.cos(i
)
          
i=i+
0.2
          
if i==360 then i=
0   end
end

Runtime
:addEventListener("enterFrame"przesun
 

Sercem tego programu jest funkcja przesun a dokładnie przypisanie punktom x i y obiektu pilka_plazowa_mala punktu początkowego przesuniętego o cały promień przy zadanym kącie wobec osi x. Kąt jest wyznaczany za pomocą operacji:

i=i+0.2, czyli za każdym razem, kiedy uruchamiamy funkcję przesun() to kąt zwiększa się od zera co krok 0.2 aż do osiągnięcia 360 stopni po czym wraca do 0 stopni i tak w kółko.

Motorem, który uruchamia tę funkcję 30 lub 60 razy na sekundę jest nasz "szpieg", który nasłuchuje wywołania zdarzenia enterFrame, czyli pojawienia się kolejnej klatki ekranu.

Warto przetestować też różne wartości wstępne np. punkt początkowy srodek_x, srodek_y, promien.

Czytaj dalej: Jak poruszać obiekt po okręgu?
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