我今天遇到的数据管理新问题是:出于某种原因,按键绑定保存系统似乎无法正确保存到文件中。总结一下代码,我正在结合两个教程来实现这个功能。每个教程名称旁边会以某种形式列出代码。此外,由于这种组合系统,我修改了一些方面。
首先,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语句触发,输入响应将无法工作。我使用这个保存和加载数据的系统处理进度以及非按键绑定设置(音量、亮度)相当顺利,但按键绑定再一次成了麻烦,我不知道解决方案是什么……有什么想法吗?
评论 (0)