Grapher - 我的 Rbx.Lua 脚本有什么问题?
Grapher - What is wrong with my Rbx.Lua Script?
我有 Lua 的 Roblox 版本的脚本。 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,所以我不知道正弦、余弦和切线,也不知道参数方程。
最初查看代码时,我发现了很多语法错误,所以我查看了 Roblox Wiki 上的代码,惊讶地发现您提供的代码与他们的代码相匹配。
抛开 Roblox Wiki 正在维护损坏的代码这一事实,让我们来看看为什么您的代码无法正常工作,以及您可以采取哪些措施来修复它。
我将从您遇到的问题开始,该问题源自语句 bounds.step = bounds.step or (bounds.max - bounds.min) / bounds.n
(由于 Lua 的工作原理,解释器将其读作 (bounds[max] - bounds[min]) / bounds.n
,因为 table.value
是 table[value]
的语法糖,我们从未定义 bounds.max
或 bounds.min
,这就是您收到错误的原因。)
评估该表达式的正确方法是使用显式参数调用 math.max()
和 math.min()
,如下所示:(math.max(bounds.from, bounds.to) - math.min(bounds.from, bounds.to)) / bounds.n
,因为它们都没有被编码为用作方法,并且无论如何只能将 integers/floats 作为参数;表格是不允许的,将 return 一个错误。
我注意到的第二个错误,也是在解决上述问题后会出现的错误,是为了克隆模板部分(在全局范围内定义为 local p
),原始代码的作者使用p.clone()
,实际上 return 是这个错误:01:49:37.933 - Expected ':' not '.' calling member function clone
针对此错误的 returned 响应非常自我描述,但我还是要说:为了修复此错误,只需将 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)
我有 Lua 的 Roblox 版本的脚本。 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,所以我不知道正弦、余弦和切线,也不知道参数方程。
最初查看代码时,我发现了很多语法错误,所以我查看了 Roblox Wiki 上的代码,惊讶地发现您提供的代码与他们的代码相匹配。
抛开 Roblox Wiki 正在维护损坏的代码这一事实,让我们来看看为什么您的代码无法正常工作,以及您可以采取哪些措施来修复它。
我将从您遇到的问题开始,该问题源自语句 bounds.step = bounds.step or (bounds.max - bounds.min) / bounds.n
(由于 Lua 的工作原理,解释器将其读作 (bounds[max] - bounds[min]) / bounds.n
,因为 table.value
是 table[value]
的语法糖,我们从未定义 bounds.max
或 bounds.min
,这就是您收到错误的原因。)
评估该表达式的正确方法是使用显式参数调用 math.max()
和 math.min()
,如下所示:(math.max(bounds.from, bounds.to) - math.min(bounds.from, bounds.to)) / bounds.n
,因为它们都没有被编码为用作方法,并且无论如何只能将 integers/floats 作为参数;表格是不允许的,将 return 一个错误。
我注意到的第二个错误,也是在解决上述问题后会出现的错误,是为了克隆模板部分(在全局范围内定义为 local p
),原始代码的作者使用p.clone()
,实际上 return 是这个错误:01:49:37.933 - Expected ':' not '.' calling member function clone
针对此错误的 returned 响应非常自我描述,但我还是要说:为了修复此错误,只需将 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)