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 Kolizje w grach

      Jak wiadomo gry opierają się często na bohaterach głównych, przeciwnikach, którzy próbują zniweczyć nasze plany a także pułapkach, które mogą być groźne a nawet bardzo groźne. By wykryć zdarzenie zetknięcia się bohatera z przeszkodą lub też z przeciwnikiem lub czymś co przeciwnik rzucił trzeba ciągle sprawdzać czy nie nastąpiła kolizja.

    Nie chcę teraz gmatwać zbytnio tematu zatem podam bardzo prosty przykład a mianowicie dwie spadające kulki po zderzeniu się z jedną z nich niezniszczalną wszystko inne przestaje się wyświetlać. Skorzystam oczywiście z naszego wcześniejszego 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
)
local pilka_plazowa_mala1 display.newImage("pilka_plazowa_mala.png"
)

physics.addBody(pilka_plazowa_mala1, {radius=50,density=0friction=1bounce=0.3
})
pilka_plazowa_mala1.x=
152
pilka_plazowa_mala1
.y=
152

pilka_plazowa_mala
.x=
150
pilka_plazowa_mala
.y=
150

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

function usun_pilke(event
)
    if 
event.phase=="began" 
then
         event
.other.isVisible=
false
    end
end
pilka_plazowa_mala
:addEventListener("collision"usun_pilke)

To co nas tak naprawdę interesuje to pogrubiłem. Wcześniejszych linijek nie omawiam, bo były już omawiane w ramach portalu.

Zatem pierwszej piłce przypisujemy "szpiega", który śledzi zdarzenia i wyłapuje tylko te, które noszą znamiona kolizji pilka_plazowa_mala:addEventListener("collision", usun_pilke). Zaś efektem wyłapania takiego zdarzenia będzie wywołanie funkcji usun_pilke o czym świadczy drugi parametr funkcji.

Sama zaś powyższa funkcja w fazie początkowej zmienia status obiektu z którym zderzy się nasza piłka na niewidzialny - event.other.isVisible=false. Gdybyśmy chcieli, by zniknęła nasza piłka to zamiast event.other wpisalibyśmy nazwę naszej piłki czyli
pilka_plazowa_mala.isVisible=false.

corona_sdk_81.jpgEfektem działania tej funkcji będzie uczynienie widzialnymi obiekty z którymi zetknęła się nasza piłka.
corona_sdk_82.jpg

Usunięcie a właściwie wyłączenie hybrydowego widoku czyli
--physics.setDrawMode("hybrid") ukaże, że obiekty faktycznie poznikały.

corona_sdk_83.jpg

Pozostaje jednak pytanie jak poznikały to dlaczego piłka całkowicie nie spadła? Otóż obiekty się nie wyświetlają ale faktycznie to one tam są. Zatem by je całkowicie usunąć należy zamiast:    
event.other.isVisible=false
trzeba wstawić:
event.other:removeSelf()

Teraz piłka poleci w siną dal...



Czytaj dalej: Kolizje w grach
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