我今天遇到的数据管理新问题是:出于某种原因,按键绑定保存系统似乎无法正确保存到文件中。总结一下代码,我正在结合两个教程来实现这个功能。每个教程名称旁边会以某种形式列出代码。此外,由于这种组合系统,我修改了一些方面。

首先,GameMaker频道的“如何在GameMaker中制作保存与加载系统”教程:

// 此函数保存游戏中已完成关卡的数据,并在每次房间切换时通过始终优先执行的持久对象obj_vardefine触发

function savingData(){

`if(variable_global_exists("completed_tasks")){`

    `if(file_exists("user_data.txt")){`

        `file_delete("user_data.txt")`

    `}`

    `// 结构变量用于将数组completed_levels以字符串形式正确存储在文件中`

    `var _struct =`

    `{`

        `// 此设置可用于在结构中存储更多全局变量。`

        `binds : obj_menus_and_keybinds.keybinds`

    `};`

    `var _string = json_stringify(_struct);`



    `var _file = file_text_open_write("user_data.txt");`



    `file_text_write_string(_file,_string);`

    `file_text_close(_file);`

`}`

}

// 此函数加载用户保存的数据,

// 前提是文件存在。

function loadGame(){

    `if(file_exists("user_data.txt")){`



        `// 查找名为user_data.txt的文件并将其放入变量_file`

        `var _file = file_text_open_read("user_data.txt");`

        `// 将文件user_data.txt中的字符串读取到变量_json中`

        `var _json = file_text_read_string(_file);`

        `// 将_json中存储的字符串解析到变量_struct中`

        `var _struct = ""`

        `try{`

_struct = json_parse(_json);

这里尝试了相关的保存操作。

with(obj_menus_and_keybinds){

keybinds = _struct.binds;

} catch(error){} // 以防出现错误。不确定一直对这样的代码使用try catch块是不是坏习惯。

`}`

}

第二部分是nullaby的两部分视频“Gamemaker中的按键绑定系统教程”。为了本Reddit帖子的目的,我只发布我做了重大更改的代码部分。希望问题出在这里,而不是其他代码部分……

function initialize_keybinds(){

`with(obj_menus_and_keybinds){`

    `/* 这段代码被列为注释,因为运行它会导致所有按键绑定失效。`

        `if(file_exists("user_data.txt")){`

// 查找名为user_data.txt的文件并将其放入变量_file

var _file = file_text_open_read("user_data.txt");

// 将文件user_data.txt中的字符串读取到变量_json中

var _json = file_text_read_string(_file);

// 将_json中存储的字符串解析到变量_struct中

var _struct = ""

try{

_struct = json_parse(_json);

self.keybinds = _struct.binds

}

        `} else {`

//*/

self.keybinds = [

// 具有以下结构的代码

new BindMB("按键绑定名称字符串", 按钮常量),] }

`}`

需要说明的是,问题不是括号结构的任何错误(如果我在这里犯了错误,深表歉意),而是初始化按键绑定函数在loadGame函数之后执行,并且如果初始化函数中的if语句触发,输入响应将无法工作。我使用这个保存和加载数据的系统处理进度以及非按键绑定设置(音量、亮度)相当顺利,但按键绑定再一次成了麻烦,我不知道解决方案是什么……有什么想法吗?