comprobación simple de colisión

This commit is contained in:
serxoz 2022-05-30 20:34:58 +02:00
parent f43e0c25b2
commit c1c1eece39
6 changed files with 36 additions and 8 deletions

16
entidades/cercado.lua Normal file
View File

@ -0,0 +1,16 @@
Cercado = {}
function Cercado:new(x, y)
self.sprite = love.graphics.newImage("img/cercado.png")
self.width = self.sprite:getWidth()
self.height = self.sprite:getHeight()
self.x = x-self.width/2
self.y = y-self.height/2
self.speed = 2
return self
end
function Cercado:draw()
love.graphics.draw(self.sprite, self.x, self.y)
end

View File

@ -1,3 +1,5 @@
require("../lib/helpers")
Ovella = {} Ovella = {}
local OvellaMT = {__index = Ovella} local OvellaMT = {__index = Ovella}
@ -14,7 +16,7 @@ function Ovella:new(id, x, y)
return setmetatable(instance, OvellaMT) return setmetatable(instance, OvellaMT)
end end
function Ovella:update(pastor) function Ovella:update(pastor, cercado)
-- vector -- vector
local X = pastor.x - self.x; local X = pastor.x - self.x;
local Y = pastor.y - self.y; local Y = pastor.y - self.y;
@ -43,6 +45,9 @@ function Ovella:update(pastor)
if distancia < DISTANCIA then if distancia < DISTANCIA then
-- movemento -- movemento
-- FIXME comprobar que non se vai de marxenes e non choca con muros -- FIXME comprobar que non se vai de marxenes e non choca con muros
print(Helpers:CheckCollision(self, cercado))
-- Establece a nova posición
self.x = self.x - dX; self.x = self.x - dX;
self.y = self.y - dY; self.y = self.y - dY;
end end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 920 B

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
img/pastor2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 920 B

10
lib/helpers.lua Normal file
View File

@ -0,0 +1,10 @@
Helpers = {}
function Helpers:CheckCollision(entidade1, entidade2)
return entidade1.x < entidade2.x+entidade2.width and
entidade2.x < entidade1.x+entidade1.width and
entidade1.y < entidade2.y+entidade2.height and
entidade2.y < entidade1.y+entidade1.height
end
return Helpers

View File

@ -1,6 +1,7 @@
require "socket" -- para o tempo en milisengundos require "socket" -- para o tempo en milisengundos
require("entidades/pastor") require("entidades/pastor")
require("entidades/ovella") require("entidades/ovella")
require("entidades/cercado")
inspect = require 'lib.inspect' inspect = require 'lib.inspect'
-- configuracion -- configuracion
@ -21,16 +22,14 @@ function love.load()
-- imaxes -- imaxes
background = love.graphics.newImage("img/fondo.png") background = love.graphics.newImage("img/fondo.png")
cercado = love.graphics.newImage("img/cercado.png")
-- fonte -- fonte
local f = love.graphics.newFont(12) local f = love.graphics.newFont(12)
love.graphics.setFont(f) love.graphics.setFont(f)
-- entidades -- entidades
cercado = Cercado:new(width/2, height/2)
player = Pastor:new(width/2, height/2) player = Pastor:new(width/2, height/2)
-- ovellas con posicios aleatorias
for i=1,OVELLAS do for i=1,OVELLAS do
-- print(i) -- print(i)
math.randomseed(os.time()+i) math.randomseed(os.time()+i)
@ -55,9 +54,7 @@ function love.draw()
end end
-- cercado -- cercado
cercadoX = (love.graphics.getWidth() - cercado:getWidth()) / 2 cercado:draw()
cercadoY = (love.graphics.getHeight() - cercado:getHeight()) / 2
love.graphics.draw(cercado, cercadoX, cercadoY)
-- pastor -- pastor
player:draw() player:draw()
@ -76,7 +73,7 @@ function love.update(dt)
player:update(dt) player:update(dt)
-- update ovella object -- update ovella object
for i = 1, #ovellas,1 do --itera sobre cada ovella na tabla for i = 1, #ovellas,1 do --itera sobre cada ovella na tabla
ovellas[i]:update(player) ovellas[i]:update(player, cercado)
end end
end end