Как вызывать функции в других файлах скриптов в Roblox - PullRequest
4 голосов
/ 28 июня 2009

У меня есть файл сценария, встроенный в рабочую область, который содержит функции. Я хотел бы вызывать эти функции из файлов сценариев, встроенных в дочерние объекты рабочей области. Я не хочу копировать и вставлять эти функции в несколько файлов сценариев. Я подумал, что объектно-ориентированный подход будет наилучшим, если это возможно.

Ответы [ 7 ]

5 голосов
/ 23 ноября 2010

Альтернативой _G является использование также доступной по всему миру таблицы, shared . Shared используется так же, как _G, но вы должны указать «shared» перед идентификатором переменной, в отличие от _G, где вы можете просто написать имя переменной без _G ( больше нет в Roblox ). Shared используется в следующем контексте:

shared["variablename"] = value

Так же, как в глобальном стеке, _G. Пример использования shared:

Сценарий 1

shared["rprint"] = function(array) for i,v in pairs(array) do print(i, v) end end

Сценарий 2

repeat wait() until shared["rprint"]
shared.rprint({"Hello, ", "How", " are", " you?"})

Выводом этого скрипта будет «Привет, как дела?»

2 голосов
/ 23 ноября 2010

Я знаю, что это было сказано ранее, но просто используйте обычный _G или общий доступ для доступа к нему.

Скрипт один

_G.myFunction = function()
     print("Hello, myFunction!")
end

Сценарий два

repeat wait() until _G.myFunction()
_G.myFunction()

выход

Здравствуйте, myFunction!

2 голосов
/ 22 ноября 2010

Вы можете сделать функцию глобальной. В один скрипт делает это:

_G.myFunction = function() print("Hello World") end

В другом скрипте сделайте это:

repeat wait() until myFunction myFunction()

Определяя функцию _G, вы должны дождитесь выполнения скрипта назначив функцию, то вы можете вызывать функцию даже без указав _G.

Это не сработает, потому что из-за обновлений ROBLOX теперь вам приходится индексировать _G при каждом доступе к элементам внутри него.

Вы также не можете использовать dofile () в ROBLOX, как я уже упоминал выше.

В ответ на вопрос: вам нужно создать функцию в одном скрипте в глобальной таблице - _G, добавив _G.MyFunction = function (parameters) end. В другом скрипте вам нужно получить к нему доступ внутри таблицы _G - _G.MyFunction ().

Общая проблема, которая возникает для скриптов ROBLOX, заключается в том, что вы пытаетесь получить доступ к своей функции внутри _G до ее создания. Простой способ решить эту проблему - добавить ожидание, пока оно не будет создано, как это предлагается из сообщения Камой:

repeat wait() until _G.MyFunction() 
1 голос
/ 02 марта 2016

Я бы использовал BindableEvents или RemoteEvents. Я думаю, что это лучший подход, чем использование _G. Это позволит вам сохранить все локально. Вы можете использовать Bindableevents и RemoteEvents для запуска функций и отправки столько данных, сколько вам нужно, между сценариями. Используйте BindableEvents для связи сервер / сервер и RemoteEvents для взаимодействия сервер / клиент-клиент / сервер.

http://wiki.roblox.com/index.php?title=API:Class/BindableEvent

1 голос
/ 22 ноября 2010

Самый простой способ - использовать _G или общий доступ.

В одном скрипте,

_G.myFunction = function(Arguments)

-- blah

end

В другом скрипте вы использовали бы этот код.

repeat wait() until _G.myFunction ~= nil

_G.myFunction()

Это также будет работать с общей таблицей общего доступа вместо _G.

1 голос
/ 17 июля 2010

Вы можете сделать функцию глобальной. В одном скрипте сделайте это:

_G.myFunction = function() print("Hello World") end

В другом скрипте сделайте это:

repeat wait() until myFunction myFunction()

Определяя функцию как _G, вы должны дождаться, пока скрипт выполнит назначение функции, затем вы можете вызвать функцию, даже не указав _G.

0 голосов
/ 23 декабря 2016

Вы можете использовать Скрипты модулей, которые, к счастью, были добавлены. Вы можете поместить туда функции, затем вызывать их и использовать где угодно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...