Шукати в цьому блозі

Колізія об'єктів (зіткнення об'єктів)

- Проста перевірка колізій Застарілий метод

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

Немає коментарів:

Дописати коментар