- Проста перевірка колізій Застарілий метод
function collisionTest(spriteA, spriteB)
--проверяем накладывается ли один обьект на второй
local collided = false
x1,y1,w1,h1,x2,y2,w2,h2 = spriteA.x, spriteA.y, spriteA.width, spriteA.height, spriteB.x, spriteB.y, spriteB.width, spriteB.height
if (y2 >= y1 and y1 + h1 >= y2) or (y2 + h2 >= y1 and y1 + h1 >= y2 + h2) or (y1 >= y2 and y2 + h2 >= y1) or (y1 + h1 >= y2 and y2 + h2 >= y1 + h1) then
if x2 >= x1 and x1 + w1 >= x2 then
collided = true
end
if x2 + w2 >= x1 and x1 + w1 >= x2 + w2 then
collided = true
end
if x1 >= x2 and x2 + w2 >= x1 then
collided = true
end
if x1 + w1 >= x2 and x2 + w2 >= x1 + w1 then
collided = true
end
end
return collided
end
----------------------------------------------------
--теперь залишилося викликати нашу функцію перевірки колізій наприклад перевіримо колізію об'єкта spriteA з будь-яким з масиву об'єктів spriteB
---------------------------------------------------------
for i=1,max_spriteB do
if collisionTest (spriteA, spriteB[i]) == true then
--здесь выполняем действия при коллизии
end
end
-------------------------------------------------------------
Функція перевірки колізії
-------------------------------
function Sprite:collision(sprite2)
-- self bottom < other sprite top
if self:getY() + self:getHeight()/3 < sprite2:getY() then
return false
end
-- self top > other sprite bottom
if self:getY() > sprite2:getY() + sprite2:getHeight() then
return false
end
-- self left > other sprite right
if self:getX() > sprite2:getX() + sprite2:getWidth() then
return false
end
-- self right < other sprite left
if self:getX() + self:getWidth()/3 < sprite2:getX() then
return false
end
return true
end
-------------------------------------
Візіваем функцію так
-------------------------------------
if self:collision(спрайтБ) then
--действия при коллизии
end
-----------------------------------
Цей метод перевіряє зіткнення прямокутників, еліже потрібно перевіряти більш складні фігури, то простіше опользоваться фізичним АПИ Box2D b2.PolygonShape -
http://docs.giderosmobile.com/reference/physics/b2PolygonShape/new#b2.PolygonShape.new
http://www.box2d.org/manual.html#_Toc258082970
Немає коментарів:
Дописати коментар