Game Maker Studio: 10 лучших рекордов (серьезно)

Я чувствую себя очень глупо из-за того, что публикую это, но я пытаюсь добиться этого уже целую неделю, и у меня ничего не получается!

Я пытаюсь создать доску рекордов. 10 лучших результатов, сохраненных в файле INI. Я искал каждую вещь во всем Интернете когда-либо. Я просто не понимаю этого.

Итак, что я пробовал, это...

У меня есть настройка «load_room». Когда эта комната загружается, она запускает этот код:

ini_open('score.ini')
ini_write_real("Save","highscore_value(1)",highscore_value(1));
ini_write_string("Save","highscore_name(1)",highscore_name(1));
ini_close();

room_goto(room0);

Затем, когда мой персонаж умирает:

myName = get_string("Enter your name for the highscore list: ","Player1"); //if they enter nothing, "Player1" will get put on the list
highscore_add(myName,score);

ini_open('score.ini')
value1=ini_write_real("Save","highscore_value(1)",0);
name1=ini_write_string("Save","highscore_name(1)","n/a");
ini_close();
highscore_clear();
highscore_add(myName,score);

score = 0;
game_restart();

Я не беспокоюсь о том, чтобы включить код для отображения результатов, поскольку я проверяю score.ini, который создает игра, на наличие реальных добавленных значений.

С этим я, кажется, могу сэкономить ОДИН балл, и все. Мне нужно сохранить 10. Еще раз извините, что задаю тот же извечный вопрос, но мне действительно нужна помощь, и я надеюсь, что кто-то там может помочь!

Большое спасибо, Ли.


person Lee Valentine    schedule 27.10.2015    source источник
comment
Я думаю, вы перепутали ini_write_real и ini_read_real.   -  person Andrea    schedule 09.12.2015
comment
Для всех, кто посещает эту страницу, позвольте мне отметить, что есть несколько расширений для создания онлайн-системы рекордов, которые позволяют игрокам видеть высокие баллы других игроков. Типа круто. См. google.com/   -  person wp-overwatch.com    schedule 08.04.2016


Ответы (1)


  1. Почему вы используете сохранение в load_room вместо загрузки?
  2. Почему ты убираешь со стола после смерти?
  3. Вам нужно использовать цикл для сохранения каждого результата.

Например, загрузка:

highscore_clear();

ini_open("score.ini");
for (var i=1; i<=10; i++)
{
    var name = ini_read_string("Save", "name" + string(i), "");
    var value = ini_read_real("Save", "value" + string(i), 0);
    if value != 0
        highscore_add(name, value);
}
ini_close();

room_goto(room0);

Умереть:

myName = get_string("Enter your name for the highscore list: ","Player1");
highscore_add(myName, score);

ini_open("score.ini");
for (var i=1; i<=10; i++)
{
    ini_write_string("Save", "name" + string(i), highscore_name(i));
    ini_write_string("Save", "value" + string(i), string(highscore_value(i)));
}
ini_close();

score = 0;
game_restart();

И еще несколько вещей...

score = 0;

Делать это нужно при запуске игры, так что здесь это не нужно.

get_string("Enter your name for the highscore list: ","Player1");

Вы читали примечание в справке?

ПРИМЕЧАНИЕ. ЭТА ФУНКЦИЯ ПРЕДНАЗНАЧЕНА ТОЛЬКО ДЛЯ ОТЛАДКИ. Если вам потребуется эта функциональность в финальной версии игры, используйте get_string_async.

Я использовал ini_write_string(..., ..., string(...)); вместо ini_write_real(), потому что во втором случае будет сохранено что-то вроде 1000.000000000, а в первом случае будет сохранено только 1000.

person Dmi7ry    schedule 27.10.2015