【发布时间】:2022-08-23 01:57:05
【问题描述】:
本质上,我正在使用 Electron 内部的 JavaScript、CSS、HTML 等制作游戏,以便我可以轻松访问本地文件。游戏将完全是本地和离线的。永远不要与服务器建立任何类型的连接。
但我的想法本质上是小的独立故事,它们被加载到玩家可以选择的池中,只需将它们放入一个文件夹中,它们就会包含在游戏中。我为此使用了 JSON 文件,但我也希望能够在故事模块启动时创建特定于故事模块的变量。
例如,我想为故事模块中的角色随机命名,所以在开始时:
\"do_at_start\" : \"story_variables.character_name = randomChoiceFunction(\'name1\', \'name2\', \'name3\')\"
等
我想这样做的原因是任何想要制作自定义 JSON 文件并以这种方式将它们放在游戏中的想法,而不是编写函数等来制作新模块。
我认为最简单的方法是在需要时在 JSON 值的字符串中输入
eval()
代码。这是一个本地应用程序,这仍然是一个坏主意吗?还是有其他方法也可以解决这个问题?理想情况下,我希望得到可以从头开始提出的建议作为一种练习,看看我是否可以从头开始编写类似的东西,但如果它们更容易实现,我仍然会接受其他方法的建议。
-
我个人不推荐这种方法,因为您将允许人们共享他们的 json,并且有些人可能会将恶意代码包含到他们的 json 中,然后通过 eval 执行这些代码。相反,您可以提供作为玩家最终可以调整的选项数组的属性,如果共享则没有任何风险? (例如:
\"possibleNames\" : [ \"name1\", \"name2\", \"name3\"]
-
当变量只是一个随机选择但我希望做的不仅仅是那个时,这很有效。例如,如果某种值为真,则选择某些变量。
-
没错,我的例子是为一个非常简单的案例设置的。对于取决于值的选择,您可以通过设置具有属性的对象而不是数组中的字符串,并添加可与本机
Array.filter()
或其他类似方法一起使用的属性(也可以是加权选择)。这不会将您限制为仅随机选择,并且还可以对玩家可以使用 json 操作进行的操作保持一些控制/安全性。如果您可以共享一个 json 模板和集成它的代码,这可能也会帮助人们帮助您:)