【问题标题】:Grapher - What is wrong with my Rbx.Lua Script?Grapher - 我的 Rbx.Lua 脚本有什么问题?
【发布时间】:2015-05-15 04:17:09
【问题描述】:

我有一个 Roblox 版本的 Lua 脚本。 Roblox 的语法检查系统说我的脚本没有问题。该脚本应该使用“Parts”或“Bricks”创建一个圆图。下面是我从中获取图形函数的 wiki 页面。

我认为 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 游戏引擎中的 3D 积木绘制一个圆圈。相反,什么也没有发生。
  • 嘿,你能给我们一张它在画什么的截图吗?我在工作,无法使用工作室 - 不过如果您发布图片,我可能会提供帮助。
  • 它不画任何东西。输出控制台中不会报告任何错误,并且工作区中不会创建积木。我点击播放,底板仍然是底板。
  • 我卸载并重新安装了 Roblox studio。这解决了部分问题。我现在收到如下所示的错误。我不知道该怎么办。 12:18:07.320 - Workspace.Script:10: attempt to index field 'max' (a nil value)

标签: graph lua equations roblox parametric-equations


【解决方案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)

【讨论】:

  • 感谢您的帮助!我阅读了您的整个帖子并理解了这个问题。我正在制作一个程序,该程序使用单独的基于 python 的网络爬虫和 HttpService 绘制交易汇率图表。我将尝试将此脚本转换为使用 GUI,以便更容易。它将成为 Robux Academy 的一部分 - 如果您想在几个月内看到它的实际效果,这是一系列“致富”付费游戏。
  • 我想让每个点在图表上更明显,因为 13.742 作为 X 位置(在 Workspace 中,而不是 StarterGUI)距离 13.746 不是很远。我认为从数字中减去整数(在本例中为 13)然后将其乘以 10 或更多会使它更明显。不过我不知道该怎么做。
  • @GShocked 如果您需要更多帮助,请尝试在 ROBLOX 论坛上的以下主题中发帖:Game Design。有很多人(包括我自己)愿意为提出问题的人提供帮助。
猜你喜欢
  • 2015-04-06
  • 2014-06-29
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
相关资源
最近更新 更多