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 nadać obiektom prędkość w grze?

     Często w grach potrzebujemy nadać obiektom prędkość. Wtedy z pomocą przychodzą specjalne funkcje, które pozwalają na przyłożenie pewnej ściśle określonej siły do obiektu niekiedy nawet w wybranym punkcie obiektu.

     Jednym z najprostszych sposobów nadania prędkości obiektom jest użycie funkcji liniowej prędkości a mianowicie:

obiekt:setLinearVelocity(prędkośćX, prędkośćY)

Wtedy obiekt zacznie się poruszać z zadaną prędkością wzdłuż osi X i Y. Trzeba jednak uwzględnić siły grawitacji! Przejdźmy do naszego przykładu:

    local physics = require("physics"
physics.setDrawMode("hybrid"
)
    
physics.start
()
    
local pilka_plazowa_mala display.newImage("pilka_plazowa_mala.png"
)
    
local podloze display.newRect(0,80060050
)

    
physics.addBody(pilka_plazowa_mala, {radius=50density=7friction=1bounce=0.3
})
physics.addBody(podloze, {density=1friction=10bounce=0.3
})
    
podloze.bodyType 
"static"



pilka_plazowa_mala:setLinearVelocity(100,10
 

W zasadze interesować nas będzie ostatnia linijka kodu, czyli:

pilka_plazowa_mala:setLinearVelocity(100,10 

(bo wcześniejsze były już omawiane a wstawiłem je tu, by można było je skopiować do edytora Corona SDK). Jeśli chodzi o funkcję setLinearVelocity, to uruchomiona z podanymi wyżej parametrami, przyłoży do naszego obiektu czyli do pilka_plazowa_mala siłę odpowiedni dla x=100 pikseli na sekundę zaś w osi y 10 pikseli na sekundę. Ważne jest również to, że siła ta będzie przyłożona do środka obiektu.

corona_sdk_76.jpg

Zobaczmy co się stanie z piłką w naszym przypadku. Pomimo, że nadaliśmy 10 razy większą prędkość w osi x to jednak większe przesunięcie będzie w osi y. Dlaczego? Otóż dlatego, że zadziała tu również wspomniana przed chwilą siła grawitacji, która doda się do zadanej siły.

Jak pozbyć się grawitacji?

Co jednak gdybyśmy chcieli, by obiekt poruszał się z zadaną prędkością czyli x=100 a y=10piskeli na sekunde nie zważając na grawitację?

Wstarczy:

  • usunąć całkowicie grawitację wpisując physics.setGravity(0,0)
  • bądź też dla naszego obiektu ją wyłączyć poleceniem: pilka_plazowa_mala.gravityScale=0

Zobaczmy co się wtedy stanie:

corona_sdk_77.jpg

Zauważmy fakt, że teraz piłka będzie 10 razy szybciej zmierzała w poziomie niż w pionie tak jak to zadaliśmy w funkcji setLinearVelocity(100,10). Siła grawitacji została wyłączona dla naszego obiektu poleceniem gravityScale=0.

Tłumienie prędkości liniowej w Corona SDK

Gdy chcemy, by nasz obiekt zachowywał się nieco bardziej realnie czyli podlegał tłumieniu, bo przecież kopnięta piłka po jakimś czasie się zatrzymuje, musimy dodać do naszego kodu funkcje tłumienia:

obiekt.linearDamping=wartość_tłumienia

Zobaczmy to w praktyce dodając do naszego kodu linijkę:

pilka_plazowa_mala.linearDamping=1

corona_sdk_78.jpg

Teraz piłka przesunie się w prawo i nieco w dół, jednak po przemierzeniu niewielkiego odcinka drogi zatrzyma się. Tak właśnie działa tłumienie. Opory sprawiły, że siła, która została przyłożona do piłki po chwili została wytłumiona i stracona na np. ciepło związane z tarciem piłki o cząstki powietrza.
Jak widać jedynka dość mocno tłumi ruch więc można spróbować z wartością tłumienia np. 0.1.

W silniku Corona SDK a w zasadzie Box2D, bo to on został do niej dołożony są jeszcze dostępne funkcje pozwalające wprawić w ruch nasz obiekt np:

  • obiekt:applyForce(siła_x,siła_y,punkt_obiektu_x,punkt_obiektu_y)
  • applyLinearImpulse(siła_x,siła_y,punkt_obiektu_x,punkt_obiektu_y)

Myślę, że zajmiemy się nimi w przyszłości przy okazji poruszania postaciami w grach.

Czytaj dalej: Fizyka w grach 2d - Android
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