所以我一直在 roblox 中制作完全基于 gui 字体查看器的游戏,我添加了一个主题选项,很快就会添加一个文字编辑器,现在让我们关注主题,我有 2 个主题,默认主题和绿色主题,以及通往其中每一个都是 game.startergui.screengui.themeframe.default 游戏.startergui.screengui.themeframe.gren
当我在这些之间进行更改时,它可以工作,但是当我重新加入时,默认主题始终显示 非常感谢您的帮助
我尝试了chatgpt,但chatgpt的代码永远无法工作。
需要注意的是,数据存储可以存储您想要的任何类型的数据(如果您对其进行编码)。在您的情况下,您似乎只想存储一个字符串,这是用户选择的主题。假设这是一个客户端应用程序,您将需要一个远程事件来获取主题,并需要一个远程事件来设置主题。这是因为数据存储只能从服务器访问。
Roblox 文档包含有关远程事件和回调以及数据存储的文章。
这里是我编写的一些代码,用于通过名为
GetTheme
的远程事件和名为 UpdateTheme
的远程函数处理从数据存储中保存和检索数据,这两个函数都位于 ReplicatedStorage
内部。脚本本身应该作为服务器端脚本位于 ServerScriptService
中。
local THEME_DATASTORE_NAME = "Themes"
local DataStoreService = game:GetService("DataStoreService")
local themeDataStore = DataStoreService:GetDataStore(THEME_DATASTORE_NAME)
local getThemeEvent = game.ReplicatedStorage.GetTheme
local updateThemeFunction = game.ReplicatedStorage.UpdateTheme
-- We want to return true if this was successful, and false if it was not,
-- so that the client can display an appropriate error to the user.
updateThemeFunction.OnInvoke = function(player, theme)
if theme == "default" or theme == "green" then
local wasSuccess, result = pcall(function()
themeDataStore:SetAsync(player.UserId, theme)
end)
if not wasSuccess then
print("Unable to save data to data-store: " .. result)
end
return wasSuccess
end
return false
end
getThemeEvent.OnServerEvent:Connect(function(player)
-- Retrieve the theme that the user saved
return themeDataStore:GetAsync(player.UserId) or "default"
end)