Clipping
Posted: Fri Sep 23, 2022 4:49 pm
In resume, i need a script to prevent my character to noclip through the map
Here's what i have
Here's what i have
Code: Select all
function love.load()
Slimo = love.graphics.newImage("slimo.png")
Slime = love.graphics.newImage("slime.png")
MAP = love.graphics.newImage("MAP.png")
grad = 0
rot = grad * (3.1416 / 180)
R = 0
G = 240
B = 255
r = (R/255)
g = (G/255)
b = (B/255)
love.graphics.setBackgroundColor(r, g, b)
circ = {}
rect = {}
rect.x = 400
rect.y = 300
rect.width = 1
rect.height = 1
circ.x = 200
circ.y = 300
mv = 3
sc = 15
sl = 50
--Tamaño mínimo del círculo
scc = 1
--Tamaño máximo del círculo
slc = 50
sm = 1
a = 760 - rect.width
b = 560 - rect.height
rad = 1
c = 755 - rad
d = 555 - rad
end
function love.draw()
love.graphics.draw(Slime, rect.x, rect.y, 0, 0.2, 0.2, 50, 50)
love.graphics.draw(Slimo, circ.x, circ.y, 0, 0.2, 0.2, 50, 50)
love.graphics.draw(MAP, 0, 0, 0, 1, 1, 0, 0)
end
function love.update()
--definir límites del cuadrado
if rect.x > a then
rect.x = rect.x - mv
end
if rect.y > b then
rect.y = rect.y - mv
end
if rect.x < 0 then
rect.x = rect.x + mv
end
if rect.y < 0 then
rect.y = rect.y + mv
end
--Límites círculo
if circ.x > c then
circ.x = circ.x - mv
end
if circ.y > d then
circ.y = circ.y - mv
end
if circ.x < 45 + rad then
circ.x = circ.x + mv
end
if circ.y < 45 + rad then
circ.y = circ.y + mv
end
--Definir tamaño máximo del cuadrado
if rect.width > sl then
rect.width = rect.width - sc
end
if rect.height > sl then
rect.height = rect.height - sc
end
--Definir tamaño mínimo del cuadrado
if rect.width < sm then
rect.width = rect.width + sc
end
if rect.height < sm then
rect.height = rect.height + sc
end
--Definir tamaño máximo del círculo
if rad > slc then
rad = rad - scc
end
--Definir tamaño minimo del círculo
if rad < scc then
rad = rad + scc
end
--Teclas movimientos del cuadrado
if love.keyboard.isDown("d") then
rect.x = rect.x + mv
end
if love.keyboard.isDown("s") then
rect.y = rect.y + mv
end
if love.keyboard.isDown("a") then
rect.x = rect.x - mv
end
if love.keyboard.isDown("w") then
rect.y = rect.y - mv
end
--Teclas movimiento círculo
if love.keyboard.isDown("right") then
circ.x = circ.x + mv
end
if love.keyboard.isDown("down") then
circ.y = circ.y + mv
end
if love.keyboard.isDown("left") then
circ.x = circ.x - mv
end
if love.keyboard.isDown("up") then
circ.y = circ.y - mv
end
--Cambio de tamaño del círculo
if love.keyboard.isDown("-") then
rad = rad + sc
end
if love.keyboard.isDown(".") then
rad = rad - sc
end
--Cambio de tamaño del cuadrado
if love.keyboard.isDown("j") then
rect.width = rect.width + sc
a = 810 - rect.width
end
if love.keyboard.isDown("h") then
rect.height = rect.height + sc
b = 610 - rect.height
end
if love.keyboard.isDown("g") then
rect.width = rect.width - sc
a = 800 - rect.width
end
if love.keyboard.isDown("y") then
rect.height = rect.height - sc
b = 600 - rect.height
end
end
function chekCollision(a, b, c)
--With locals it's common usage to use underscores instead of camelCasing
local a_left = rect.x
local a_right = rect.x + rect.width
local a_top = rect.y
local a_bottom = rect.y + rect.height
local b_left = circ.x
local b_right = circ.x + circ.width
local b_top = circ.y
local b_bottom = circ.y + circ.height
local c
--Directly return this boolean value without using if-statement
return a_right > map
and a_left < map
and a_bottom > map
and a_top < map
and b_right > map
and b_left < map
and b_bottom > map
and b_top < map
end