2

我有一个 Roblox 版本的 Lua 脚本。Roblox 的语法检查系统说我的脚本没有问题。该脚本应该使用“零件”或“砖块”创建一个圆图。下面是我从中获得图形功能的 wiki 页面。

我认为 bounds.from 是砖块的当前位置;bounds.to 是下一个砖的下一个计算位置;bounds.step 是正在采取的步骤的计数器 - 这意味着您可以更改图形的分辨率(例如 1,000 点或 10,000 点)

用于图形功能的 Wiki 页面。我使用的是“制作绘图仪”。

local p = Instance.new("Part")
p.Anchored      = true
p.BottomSurface = "Smooth"
p.TopSurface    = "Smooth"
p.BrickColor    = BrickColor.Black()
p.FormFactor    = "Custom"
p.Size          = Vector3.new(1, 1, 1)

function graph(bounds, f)
    bounds.step = bounds.step or (bounds.max - bounds.min) / bounds.n
    for t = bounds.from, bounds.to, bounds.step do
        local xyz = f(t)
        local p = p.clone()
        p.CFrame = CFrame.new(xyz)
        p.Parent = game.Workspace
    end
end

graph({from = 0, to = math.pi * 12, n = 1000}, function(t)
    return Vector3.new(
        5 * math.cos(t),
        5 * math.sin(t),
        0
    )
end)

PS:我在代数1,所以我不知道正弦、余弦和正切,也不知道参数方程。

4

1 回答 1

1

最初查看代码时,我注意到了很多语法错误,因此我查看了 Roblox Wiki 上的代码,惊讶地发现您提供的代码与他们的匹配。

撇开 Roblox Wiki 维护损坏代码的事实不谈,让我们看看为什么您的代码无法正常工作,以及您可以采取哪些措施来修复它。

我将从您遇到的问题开始,它源于语句(bounds.step = bounds.step or (bounds.max - bounds.min) / bounds.n
由于 Lua 的工作方式,解释器将其(bounds[max] - bounds[min]) / bounds.n读取为错误。)table.valuetable[value]bounds.maxbounds.min

评估该表达式的正确方法是调用math.max()math.min()使用显式参数,如下所示:(math.max(bounds.from, bounds.to) - math.min(bounds.from, bounds.to)) / bounds.n,因为两者都没有被编码为用作方法,并且无论如何只能将整数/浮点数作为参数;表是不允许的,并且返回错误。

我注意到的第二个错误,以及在解决上述问题后会出现的一个错误,是为了克隆模板部分(定义为local p在全局范围内),使用了原始代码的编写器p.clone(),它实际上返回了这个错误:01:49:37.933 - Expected ':' not '.' calling member function clone

这个错误的返回响应是非常自我描述的,但我还是会说:为了修复这个错误,只需在图形函数内部替换local p = p.clone()为。local p = p:clone()

如果该解释过于混乱,或者您只是不想阅读它,我在下面提供了固定代码(完整)。

快乐编码。


TL;DR,或固定代码:

local p = Instance.new("Part")
p.Anchored      = true
p.BottomSurface = "Smooth"
p.TopSurface    = "Smooth"
p.BrickColor    = BrickColor.Black()
p.FormFactor    = "Custom"
p.Size          = Vector3.new(1, 1, 1)

function graph(bounds, f)
    bounds.step = bounds.step or (math.max(bounds.from, bounds.to) - math.min(bounds.from, bounds.to)) / bounds.n
    for t = bounds.from, bounds.to, bounds.step do
        local xyz = f(t)
        local p = p:clone()
        p.CFrame = CFrame.new(xyz)
        p.Parent = game.Workspace
    end
end

graph({from = 0, to = math.pi * 12, n = 1000}, function(t)
    return Vector3.new(
        5 * math.cos(t),
        5 * math.sin(t),
        0
    )
end)
于 2015-03-14T06:04:12.023 回答