La Solution que je vous propose :

-- Titre du jeu (visible sur la fenetre) :
love.window.setTitle("Faconkode.fr : Infinite Rebounds")

-- Color = {red,  green,  blue,  alpha}
local blanc = { 1,       1,    1, 1 }
local rouge = { 1,       0,    0, 1 }
local vert  = { 0,       1,    0, 1 }
local bleu  = { 0,       0,    1, 1 }
local noir  = { 0,       0,    0, 1 }
local gris  = { 0.25, 0.25, 0.25, 1 }

-- Table de l'Objet de la Fenetre Love2D:
local Fenetre = {}

-- Fonction 
function Fenetre.load()
  -- la fenetre est un rectangle(x, y, w, h) :
  Fenetre.x=0
  Fenetre.y=0
  Fenetre.w=love.graphics.getWidth()
  Fenetre.h=love.graphics.getHeight()
end
--

-- Table des Objets Rectangles :
local Rectangles = {}


-- Fonction de creation des Rectangles :
function Rectangles.load()
  Rectangles[1] = {x=10,    y=10,    w=100,  h=20,   color=blanc, vx=526,     vy=40}
  Rectangles[2] = {x=210,   y=125,   w=100,  h=20,   color=rouge, vx=125,     vy=240}
  Rectangles[3] = {x=605,   y=525,   w=100,  h=20,   color=vert,  vx=0-226,   vy=0-340}
  Rectangles[4] = {x=405,   y=260,   w=100,  h=20,   color=bleu,  vx=0-125,   vy=0-650}
  Rectangles[5] = {x=350,   y=480,   w=100,  h=20,   color=gris,  vx=850,   vy=0-340}
end
--

-- Fonction de déplacement des Rectangles :
function Rectangles.move(dt)
  for i = 1, #Rectangles do
    Rectangles[i].x = Rectangles[i].x + (Rectangles[i].vx * dt)
    Rectangles[i].y = Rectangles[i].y + (Rectangles[i].vy * dt)
  end
end
--


-- Fonction de Replacement et Renvois de vélocité des Rectangles :
function Rectangles.renvoiVelocite(dt)
  for i = 1, #Rectangles do
    -- Gauche :
    if Rectangles[i].x <= Fenetre.x then
      Rectangles[i].x = Fenetre.x
      Rectangles[i].vx = 0 - Rectangles[i].vx
    end
    -- Droite :
    if Rectangles[i].x + Rectangles[i].w >= Fenetre.w then
      Rectangles[i].x = Fenetre.w - Rectangles[i].w
      Rectangles[i].vx = 0 - Rectangles[i].vx
    end
    -- Haut :
    if Rectangles[i].y <= Fenetre.y then
      Rectangles[i].y = Fenetre.y
      Rectangles[i].vy = 0 - Rectangles[i].vy
    end
    -- Bas :
    if Rectangles[i].y >= Fenetre.h then
      Rectangles[i].y = Fenetre.h - Rectangles[i].h
      Rectangles[i].vy = 0 - Rectangles[i].vy
    end
  end
end
--

-- Fonction d'update des Rectangles avec le DeltaTime :
function Rectangles.update(dt)
  Rectangles.move(dt)
  Rectangles.renvoiVelocite(dt)
end
--

-- Fonction draw des Rectangles :
function Rectangles.draw()
  for i = 1, #Rectangles do
    love.graphics.setColor(Rectangles[i].color)
    love.graphics.rectangle("fill", Rectangles[i].x, Rectangles[i].y, Rectangles[i].w, Rectangles[i].h)
    love.graphics.setColor(blanc)
  end
end
--

-- Les Fonctions love2D :
function love.load()
  Fenetre.load()
  Rectangles.load()
end
--

function love.update(dt)
  Rectangles.update(dt)
end
--

function love.draw()
  Rectangles.draw()
end
--

Rendu :

cliquer sur le lien pour voir le rendu directement dans votre navigateur :

Inifinite Rebounds by Crypto Logiq (itch.io)