菜鸟学到的吐血教训:别写类似ds_list[| 0] = [ds_map1,"aaa",0]这样的代码……
Rusty
2018-12-02
因为在做一个带有卡牌要素的游戏,用ds_map和ds_list管理卡牌信息、牌序等等十分方便,于是当时就随手写出了类似ds_list[| 0] = [ds_map1,"aaa",0]这样的代码。现在想写存档系统了,结果一看教程,懵逼了。如果需要通过json_encode这种函数将ds数据转化为json,同时又是ds_map中含有ds_list或者ds_list中含有ds_map这种情况时,需要先使用ds_list_mark_as_map、ds_map_add_list等函数让ds_map和ds_list可以被正确写入和读取。而如果是前面这种ds_list含数组,数组里又含ds_map的形式,ds_list_mark_as_map、ds_map_add_list等函数貌似就不适用了,转成json来存档读档就会出错。于是乎不得不把ds连同相关的自定义function也改一遍……不幸中的万幸就是这部分代码本来就是刚学GMS的时候写的,也该优化了……
总之给同为新手的朋友一句话:如果想用json的格式来保存存档信息,就千万别因为一时方便就写成类似ds_list[| 0] = [ds_map1,"aaa",0]这样的代码,可以写成ds_list[| 0]=ds_map1; ds_map1[? "string"]="aaa"; ds_map[? "number"]=0;这样,把"aaa"、0这类写在ds_map里,才能正常用json函数创建/读取存档文件……
不过也可能有把ds_list[| 0] = [ds_map1,"aaa",0]这种函数正常转写成json的方法,只不过我太菜没注意到……
总之,供各位朋友参考了……含泪发布。
(转发自:原日志地址)