Grapher - 我的Rbx.Lua脚本出了什么问题?

时间:2015-03-12 20:16:59

标签: graph lua equations roblox parametric-equations

我有一个Roblox版Lua的脚本。 Roblox的语法检查系统说我的脚本没有任何问题。该脚本应该使用' Parts'创建一个圆形图。或者' Bricks'。下面是我从中获得图形功能的维基页面。

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

Wiki page for graph function. The 'Making a Grapher' is what I used.

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中,所以我不知道正弦,余弦和切线,也不知道参数方程。

1 个答案:

答案 0 :(得分: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),原始代码的编写者使用了{{ 1}},实际上会返回此错误:p.clone()

此错误的返回响应非常具有自我描述性,但无论如何我会说:为了解决此错误,只需在图表函数中将01:49:37.933 - Expected ':' not '.' calling member function clone替换为local p = p.clone()

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

快乐的编码。


TL; DR或固定代码:

local p = p:clone()