编辑Roblox模块执行错误

-- 这是Roblox自己制作的一些代码:

-- 设置我们将返回给ModuleScript的脚本的表格。
    local PlayerStatManager = {}

    -- 用于保存当前会话中所有玩家信息的表格。
    local sessionData = {}

    -- 其他游戏中的脚本可以调用的函数来更改玩家的状态。这个
    -- 函数被存储在返回的表格中,以便外部脚本可以使用它。
    function PlayerStatManager:ChangeStat(player, statName, changeValue)
        sessionData[player][statName] = sessionData[player][statName] + changeValue
    end

    -- 将玩家添加到sessionData表中的函数。
    local function setupPlayerData(player)
        sessionData[player] = {Money = 0, Experience = 0}
    end

    -- 将setupPlayerData绑定到PlayerAdded中,在玩家加入时调用它。
    game.Players.PlayerAdded:connect(setupPlayerData)

    -- 将PlayerStatManager表格返回给外部脚本以便访问。
    return PlayerStatManager
--------------------------------------------------------------------------------

-- 需要ModuleScript以便我们可以更改玩家状态
local PlayerStatManager = require(game.ServerStorage.PlayerStatManager)

-- 玩家加入后,我们会周期性地给玩家金钱和经验
game.Players.PlayerAdded:connect(function(player)
    while wait(2) do
        PlayerStatManager:ChangeStat(player, 'Money', 5)
        PlayerStatManager:ChangeStat(player, 'Experience', 1)
    end
end)

当我运行这两个脚本时,它可以完美运行,在ChangeStat函数中添加print(sessionData[player][statName]),但是当我在模块脚本中移除了game.Players.PlayerAdded:connect(setupPlayerData)部分,它就停止工作了。我认为模块脚本不会执行未被调用的代码,如果是这种情况,应该延迟game.Players.PlayerAdded:connect(setupPlayerData)部分而不是将其作为函数,因为玩家已经加入了,因此它不会触发吗?

点赞
用户2858170
用户2858170

require函数执行所需的代码。

如果不执行return PlayerStatManager语句,将无法通过require获取表格。

因此,删除以下内容

--将setupPlayerData绑定到PlayerAdded,在玩家加入时调用它。
game.Players.PlayerAdded:connect(setupPlayerData)

将导致已添加的玩家不能适当初始化。

这基本上意味着:添加新玩家时调用setupPlayerData。其中setupPlayerData表示:将一组新的统计数据给予player

当你删除了那行代码之后,没有玩家的统计数据。如果你没有统计数据,你不能增加它们的值...

因此,很显然你没有理解代码在你修改之前的作用。因此,你无法理解为什么你的修改会导致问题。

如果你不理解一个系统,你有可能会幸运地完成,但在大多数情况下会失败。

2016-04-06 09:57:06