GML, Как мне сохранить комнату в.ini?

Я изучал основы сохранения / загрузки для приключенческой игры и столкнулся с этой ошибкой:

Я начал с простого сохранения позиций X и Y с игроком вместе с комнатой, в которой он сейчас находится.

ini_open("save.ini");

ini_write_string("Player", "Room", room);
ini_write_real("Player", "X", oPlayer.x);
ini_write_real("Player", "Y", oPlayer.y);

ini_close();

Тем не менее, он выдает ошибку, как только я пытаюсь сохранить.

FATAL ERROR in
action number 1
of  Step Event0
for object pauseMenu:

ini_write_string argument 3 incorrect type (0) expecting a String (YYGS)
 at gml_Script_ini_save (line 5) - ini_write_string("Player", "Room", room);

Есть ли что-то, что я делаю не так, чтобы спасти комнату, или я должен пойти по-другому?

1 ответ

Решение

room это число, а не строка

ini_open("save.ini");

ini_write_string("Player", "Room", room_get_name(room));
ini_write_real("Player", "X", oPlayer.x);
ini_write_real("Player", "Y", oPlayer.y);

ini_close();

Для обратного преобразования вы должны использовать asset_get_index, Что-то вроде этого:

ini_open("save.ini");
var r_name = ini_read_string("Player", "Room", "");
global.startx = ini_read_real("Player", "X", 0);
global.starty = ini_read_real("Player", "Y", 0);

ini_close();

if r_name == "" or (global.startx == 0 and global.starty == 0)
{
    room_goto(r_level1); // first room
}
else
{
    var r = asset_get_index(r_name);
    if r != -1 and asset_get_type(r_name) == asset_room
        room_goto(r);
}

(Не знаю, нужны ли вам эти дополнительные проверки или нет)

Другие вопросы по тегам