9

我在包含函数的工作区中嵌入了一个脚本文件。我想从嵌入在工作区的子对象中的脚本文件中调用这些函数。我不想将这些函数复制并粘贴到多个脚本文件中。我认为如果可能的话,面向对象的方法是最好的。

4

7 回答 7

5

_G 的替代方法是使用全局可用的表shared。Shared 的使用方式与 _G 相同,但您必须在变量标识符之前指定“shared”,这与 _G 不同,您可以只写变量的名称而没有 _G在 ROBLOX 中不再如此)。Shared 在以下上下文中使用:

shared["variablename"] = value

就像在全局堆栈中一样,_G。共享的示例用法:

脚本 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?"})

该脚本的输出将是“你好,你好吗?”

于 2010-11-22T23:19:14.050 回答
3

最简单的方法是使用 _G 或共享。

在一个脚本中,

_G.myFunction = function(Arguments)

-- blah

end

在另一个脚本中,您将使用此代码。

repeat wait() until _G.myFunction ~= nil

_G.myFunction()

这也适用于共享的全局表,而不是 _G。

于 2010-11-22T20:46:59.973 回答
2

您可以将函数设为全局。在一个脚本中执行以下操作:

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

在另一个脚本中这样做:

repeat wait() until myFunction myFunction()

通过将函数定义为_G,您必须等待脚本执行分配该函数,然后即使不指定_G也可以调用该函数。

这将不起作用,因为由于 ROBLOX 更新,您现在必须在访问 _G 中的项目时对其进行索引。

正如我上面提到的,你也不能在 ROBLOX 中使用 dofile()。

回答这个问题:您需要通过添加 _G.MyFunction = function(parameters) end 在一个脚本中创建一个函数到全局表 - _G 中。在另一个脚本中,您需要在 _G 表中访问它 - _G.MyFunction()。

ROBLOX 脚本编写者出现的一个常见问题是,您尝试在创建 _G 之前访问您的函数。解决这个问题的一个简单方法是添加一个等待,直到它被创建,正如 Camoy 的帖子所建议的那样:

repeat wait() until _G.MyFunction() 
于 2010-11-22T20:02:07.513 回答
2

我知道之前已经说过了,但是只需使用普通的 _G 或 shared 来访问它。

脚本一

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

脚本二

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

输出

你好,我的功能!

于 2010-11-22T21:48:36.383 回答
1

您可以将函数设为全局。在一个脚本中执行以下操作:

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

在另一个脚本中这样做:

repeat wait() until myFunction myFunction()

通过将函数定义为_G,您必须等待脚本执行分配该函数,然后即使不指定_G也可以调用该函数。

于 2010-07-17T12:35:11.980 回答
1

我会使用 BindableEvents 或 RemoteEvents。我认为这是比使用 _G 更好的方法。这将允许您将所有内容保留在本地。您可以使用 Bindableevents 和 RemoteEvents 来触发函数并在脚本之间来回发送所需的尽可能多的数据。使用 BindableEvents 进行服务器/服务器通信,使用 RemoteEvents 进行服务器/客户端-客户端/服务器通信。

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

于 2016-03-02T18:17:08.637 回答
1

您可以使用已添加的模块脚本。您可以将函数放在那里,然后在其他任何地方调用和使用它们!

于 2016-12-22T21:29:58.290 回答