2015-03-12 5 views
2

У меня есть сценарий для версии Lua от Roblox. Система проверки синтаксиса Roblox говорит, что в моем скрипте нет ничего плохого. Предполагается, что сценарий должен создать график круга, используя «Части» или «Кирпичи». Ниже приведена страница wiki, с которой я получил функцию графика.Grapher - Что не так с моим скриптом Rbx.Lua?

Я думаю, bounds.from текущее положение кирпича; bounds.to - следующая расчетная позиция следующего кирпича; bounds.step это счетчик для того, что шаг предпринимается - означает, что вы можете изменить разрешение графика (как 1000 пунктов или 10000 очков)

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

Ну, что _is_ случилось с ним? Чего вы ожидаете? Что происходит вместо этого? –

+0

Сценарий должен отображать круг, используя 3D-кирпичи в игровом движке Roblox. Вместо этого ничего не происходит. – GShocked

+0

Эй, не могли бы вы дать нам скриншот того, что он рисует?Я на работе и не имею доступа к студии, хотя я могу помочь, если вы разместите картинку. – Henry

ответ

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, так как ни один не кодируются для использования в качестве метод и может принимать только целые числа/float как параметры; таблицы недопустимы, и будет вернуть ошибку.

Второй ошибка, я заметил, и один, который показал бы после закрепления выше проблем в том, что для клонирования части шаблона (определяются как 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) 
+0

Спасибо за помощь! Я прочитал весь ваш пост и понял проблему. Я делаю программу, которая отображает курсы обмена валюты, используя отдельный веб-скребок на основе python и HttpService. Я попытаюсь преобразовать этот скрипт вместо GUI, так что это проще. Он станет частью Академии Robux - серии игр «Get Rich» для оплаты, если вы хотите увидеть это в действии через несколько месяцев. – GShocked

+0

Я хочу сделать каждую точку более заметной на графике, потому что 13.742 как позиция X (в Workspace, а не StarterGUI) не очень далека от 13.746. Я думаю, что вычитание целого числа (в этом случае, 13) из числа, а затем умножение на 10 или более сделает его более заметным. Я не уверен, как это сделать. – GShocked

+0

@GShocked Если вам нужна дополнительная помощь, попробуйте разместите в следующей ветке на форумах ROBLOX: [Дизайн игр] (http://www.roblox.com/Forum/ShowForum.aspx?ForumID=40). Есть много людей (включая меня), которые готовы оказать помощь тем, кто спрашивает. –