Хобрук: Ваш путь к мастерству в программировании

Как сохранить массив в файл и манипулировать им из моего кода?

Это в p5.js, который включает в себя большинство функций javascript! Я пытаюсь сделать файл сохранения для своей игры. Под этим я подразумеваю: пользователь нажимает кнопку сохранения в моей игре. Он обновляет массив, сохраненный в файле, включенном в пакет игры, а игрок продолжает играть. Как бы я сделал что-то подобное (создание файлов, к которым мой код может получить доступ и изменить).

    var SM = {
//save files
    sf1: [1,0,0,0,0],
         [0,0,0,0,0],
         [0,0,0,0,0],

    sf2: [1,0,0,0,0],
         [0,0,0,0,0],
         [0,0,0,0,0],

    sf3: [1,0,0,0,0],
         [0,0,0,0,0],
         [0,0,0,0,0],
};

Еще одна вещь (ДЛЯ ОБРАБОТКИ КОДЕРОВ С этого момента): я пытался использовать функции обработки, такие как saveStrings(); и загрузитьСтроки(); но я не мог заставить saveStrings() сохранять в определенном месте и не мог правильно загрузить текстовый файл. Вот код, который я использовал для этого:

var result;
function preload() {
  result = loadStrings('assets/nouns.txt');
}

function setup() {
  background(200);
  var ind = floor(random(result.length));
  text(result[ind], 10, 10, 80, 80);
}

У меня была папка с именем assets в папке скетча, а в assets был текстовый файл с именем существительные со строками в нем (загруженный из saveStrings, а затем перемещенный вручную), но скетч не выходит за пределы экрана загрузки?


  • Ваша игра должна размещаться на сервере, на котором любой игрок может иметь свои сохранения? 22.02.2018
  • Да, и у него также будут отдельные локальные сохранения, где вы можете драться на диване или играть в совместную кампанию, или один игрок может играть онлайн с другими. Код, который я показал вам, предназначен для оффлайн-кампании для онлайн-сохранений: будет другой массив var userDatabase = []; function newUser(usr,тег игрока,pss,eml){ userDatabase.push({имя пользователя: usr, идентификатор: тег игрока, пароль: pss, электронная почта: eml}); }; 23.02.2018
  • Конечно, я добавлю больше параметров, чтобы предоставить информацию о пользователе, но это будет после того, как я использую информацию, которую я получаю здесь. 23.02.2018

Ответы:


1

Если вы запускаете его из браузера, вы не можете сохранить или загрузить файл так, как хотите, и точка. Сохранение и загрузка файлов в браузере JavaScript требует взаимодействия с пользователем, и они могут выбрать файл и место его сохранения.

Если вы хотите сохранить его локально, вместо того, чтобы пытаться записать его в файл, вы должны писать и читать его из localStorage, что вы можете сделать без проблем.

// save
localStorage.setItem('saveData', data);

// load
const data = localStorage.getItem('saveData');

Если это каким-то образом игра, запускаемая непосредственно на клиенте (из браузера), например, написанная на Node.js, вам следует использовать файл fs.


Чтобы немного расширить, если у вас есть данные сохранения в виде объекта:

const saveData = {
  state: [1,2,3],
  name: 'player'
};

Затем, чтобы сохранить его, вы просто позвоните:

localStorage.setItem('saveData', JSON.stringify(data));

Вы захотите изменить его при сохранении, чтобы он работал правильно. Чтобы прочитать его, вы можете просто прочитать его с помощью getItem():

const data = JSON.parse(localStorage.getItem('saveData') || '{}');

(Этот дополнительный бит || '{}' будет работать, если он не был сохранен ранее, и даст вам пустой объект.)

На самом деле это намного проще, чем пытаться написать файл JavaScript, который вы затем читаете. Даже если вы пишете файл, вы, вероятно, захотите записать его в формате JSON, а не JavaScript.

22.02.2018
  • Хорошо, а как сохранить файл на компьютер? 23.02.2018
  • Обычный способ — создать тег привязки (<a>) с URL-адресом данных в виде href и предлагаемым именем файла в виде download, затем добавить его в тело и вызвать его событие click(). Это вызовет обычную загрузку файла. Чтобы прочитать файл, вам нужно иметь <input> с type="file", что вызовет диалоговое окно выбора файла. Ни один из них обычно не работает в контексте игры. 23.02.2018
  • Хорошо, вашего ответа достаточно (он ответил на мой вопрос), но является ли файл JSON только для локального хранилища или я могу сохранить его как JSON на своем компьютере? (Разве локальное хранилище — это не просто файлы cookie, которые стираются при очистке истории?) 23.02.2018
  • Чтобы сохранить его на свой компьютер, вам придется использовать метод, который я упомянул в своих комментариях, который на самом деле не работает для плавного игрового процесса. Это единственный способ. localStorage похож на куки, но он более постоянный. У него нет срока годности, и он продержится намного дольше. Да, однако, это в конечном итоге исчезнет. 23.02.2018
  • Другая возможная альтернатива — сохранить его как закладку. Это можно сделать, закодировав ваши данные сохранения в виде строки (существует множество способов), затем base64 закодирует эту строку и сделает ее URL-адресом, например: example.com/mygame?data=data-string-goes-here. Затем вы можете попросить их просто добавить эту страницу в закладки для сохранения. Многие онлайн-симуляторы персонажей (для игр) и тому подобное используют это. Опять же, не супергладкий подход, а работа с ограничениями JS. 23.02.2018
  • Теперь я понимаю, как сохранить его в браузере. Я имею в виду сейчас загрузить файл сохранения на компьютер, к которому можно будет получить доступ позже 23.02.2018
  • Из браузера вы не можете напрямую прочитать файл из браузера. Это ограничение браузеров. Это невозможно сделать. Период. JavaScript в браузерах работает в песочнице, которая не допускает прямого доступа к компьютеру. Чтобы сохранить файл и загрузить файл, вы должны использовать методы, упомянутые в моем первом комментарии, которые включают взаимодействие с пользователем. Это единственный способ. 23.02.2018
  • Это не сырой Javascript, это p5.js, которому помогает код, называемый обработкой. Есть функция loadStrings и saveStrings, я просто не могу заставить их работать 24.02.2018
  • Если он запускается в браузере, он работает по тем же правилам, что и все остальное. Если на клиентском компьютере не установлено что-то специально установленное напрямую (т. сохранение и загрузка, которые вы ищете. Никакая библиотека не может обойти это. Похоже, что p5 будет вызывать аналогичные сохранения и загрузки, как указано выше, с другим кодом. Все равно не подходит для игры. До сих пор не могу выбрать где. Все еще не могу автоматически загрузиться из случайного места. 24.02.2018
  • p5js.org . Пожалуйста, посмотрите на это. сможет ли он манипулировать файлами на ПК? 26.02.2018
  • Я посмотрел на это. Я нашел точный код, который используется saveString() и loadString(). Он не сможет сделать ничего, кроме того, о чем я говорил все это время. Ничто не может. Это часть изолированной программной среды безопасности браузера. 27.02.2018
  • Хорошо, могу ли я использовать SQL (изучить его) для хранения моего массива в базе данных mysql? 27.02.2018
  • Да, это вполне рабочий подход. Вам понадобится сервер для запуска кода на стороне сервера (не выполняйте SQL на стороне клиента напрямую, это огромный риск для безопасности), но это будет допустимый подход. 27.02.2018
  • это стоит денег? 28.02.2018
  • Есть несколько бесплатных вариантов. Один бесплатный — Mongo Atlas, но это NoSQL. Heroku — бесплатный веб-хостинг. Вы также можете запустить сервер локально (например, проверьте стек MEAN). Вам придется поискать в Google. 28.02.2018
  • Хорошо, спасибо, вы мне очень помогли, я вас запомню и добавлю в титры своей игры. 28.02.2018

  • 2

    Чтобы сохранить строки в файл на Javascript, я бы рекомендовал вам этот предыдущий StackOverflow< /em> вопрос, который содержит ссылку на очень понятную и простую в использовании библиотеку для управления файлами в Javascript.

    22.02.2018
    Новые материалы

    Как симулировать серию пенальти на Python с помощью симуляции Монте-Карло, часть 1: генерация функций
    Серия пенальти была огромным испытанием во время чемпионата мира по футболу. Они вызвали много споров в социальных сетях и новостных агентствах. Даже финальный матч турнира решался по..

    AST для разработчиков JavaScript
    TL; DR Эта статья - мое выступление на недавно состоявшейся конференции Stockholm ReactJS Meetup. Вы можете посмотреть слайды здесь..

    5 проектов на Python, которые нужно создать прямо сейчас!
    Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..


    © 2024 hobruk.ru, Хобрук: Ваш путь к мастерству в программировании