如何为通过'loadfile'加载的脚本提供环境?

我正在使用love-2d框架创建游戏,我想提供Steam创意工坊物品(第三方场景)。Love2D提供了一个很好的接口,但如果我想使用该接口提供第三方场景,则非常糟糕,因为然后他们可以做任何事情。因此,我决定通过提供自定义函数来封装love2D,例如:

function MyMenu:scenario()
    local game = {
        draw = {
            circle = love.graphics.circle
        },
        timer = {
            sleep = love.timer.sleep
        },
    }
    local scenario = love.filesystem.load("scenario.lua")
    -- 禁用自定义场景的爱
    local love = nil
    scenario()
end

我期望scenario.lua将了解game变量,但不会了解love变量,但是,当我尝试执行此代码时,它会给我以下错误:

错误:love / scenario.lua:1:尝试索引全局“游戏”(空值)

那么有没有一种方法可以通过为其提供一个小子接口来隐藏一些界面?在这个具体的例子中,我想提供绘制圆形和'love.timer.sleep'的相同功能,就像love2d一样,但不会提供其他功能。

另一个问题是为什么'scenario.lua'看到了'local love = nil'但没有看到'local game'变量,我发现这是一个相互排斥的情况。

点赞