我有一个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中,所以我不知道正弦,余弦和切线,也不知道参数方程。
答案 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.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
,因为它们都没有被编码为方法,并且可以只取整数/浮点数作为参数;表格是不允许的, 会返回错误。
我注意到的第二个错误,以及在修复上述问题后会出现的第二个错误,就是克隆模板部分(在全局范围内定义为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()