Archivo de la clase:

---------------------------------------------------
------- class Cosa


-- constructor
Cosa = class(
function(this,px,py,id)
this.px = px
this.py = py
this.radio = 40
this.radio2 =10
this.id = id
this.vx = of.random(-3.98183,3.984326)
this.vy = of.random(-2.98183,2.984326)
this.parpadea = 0
end
)

function Cosa:update()
  self.px = self.px + self.vx                          -- Comportamientos: velocidad
  self.py = self.py + self.vy
  self.parpadea = math.floor(of.random(5, 8))          -- parpadeo

  if self.px <= 40 or self.px+120 > OUTPUT_WIDTH then  --- rebotes
    self.vx = self.vx * -1
  end

  if self.py-80 <= 0 or self.py+80 > OUTPUT_HEIGHT then
    self.vy = self.vy * -1
  end

  if of.getElapsedTimeMillis()%self.parpadea == 0 then
    self.radio2 = 4
    self.radio = 35
  else
    self.radio2 = 10
    self.radio = 40
  end

end

function Cosa:draw()                                        -- composicion objeto clase
  of.fill()
  of.setColor(255)
  of.drawCircle(self.px, self.py, self.radio)
  of.drawCircle(self.px +80, self.py, self.radio)

  of.setColor(0)
  of.setLineWidth(2)
  of.noFill()
  of.drawCircle(self.px, self.py, self.radio)
  of.drawCircle(self.px +80, self.py, self.radio)

  of.fill()
  of.setColor(0)
  of.drawCircle(self.px, self.py, self.radio2)
  of.drawCircle(self.px +80, self.py, self.radio2)
  of.drawCircle(self.px +40, self.py+40, self.radio/2)
end

Archivo principal

--[[

  ----------------------------------------------------------
  Mosaic | OF Visual Patching Developer Platform

  Copyright (c) 2018 Emanuele Mazza aka n3m3da

    See https://github.com/d3cod3/Mosaic for documentation
  ----------------------------------------------------------

  Class and table example: A Lua script for Mosaic,
  created by mj

]]


require("Cosa")

maxCosas = 100
actualCosa = 0
cosas = {}
mouseX = 0
mouseY = 0

----------------------------------------------------
function setup()

end

----------------------------------------------------
function update()
  for i = 0, actualCosa-1 do  -- actualiza datos para las cosas actualmente creadas
    if actualCosa > 0 then
      cosas[i]:update()
    end
  end
end

----------------------------------------------------
function draw()
  of.setColor(255)
  of.drawRectangle(0, 0, OUTPUT_WIDTH, OUTPUT_HEIGHT)
  of.setCircleResolution(120)
        for i = 0, actualCosa-1 do
    cosas[i]:draw()
  end

        of.setColor(0)
  of.drawBitmapString(tostring(actualCosa),20,20)
end

----------------------------------------------------
function exit()

end

-- input callbacks

----------------------------------------------------
function keyPressed(key)

end

function keyReleased(key)

end

function mouseMoved(x,y)
  mouseX = x
  mouseY = y
end

function mouseDragged(x,y)

end

function mouseReleased(x,y)
  if actualCosa < maxCosas then
    cosas[actualCosa] = Cosa(mouseX, mouseY, actualCosa) -- iguala la tabla a la clase
   	actualCosa = actualCosa + 1   -- incrementa actualCosa +1 con cada evento del ratón
   end
end