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,800, 600, 50)
local pilka_plazowa_mala1 = display.newImage("pilka_plazowa_mala.png")
physics.addBody(pilka_plazowa_mala1, {radius=50,density=0, friction=1, bounce=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=50, density=7, friction=1, bounce=0.3})
physics.addBody(podloze, {density=1, friction=0.5, bounce=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.
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