Сцена одним файлом

25 апреля 2017 13:48
Приветствую. Можно ли объединить файлы сцены (как минимум только bin и json) в один файл чтобы его можно было далее использовать в приложении? Задача - клиент должен загружать один файл, парсинг этого файла должен происходить на клиентской машине, а не на сервере (сервер только выдаёт загруженные ранее файлы)
Blend4Web!
26 апреля 2017 11:35
Здравствуйте! В принципе можно так же, как это делается при экспорте в HTML файл. Движок может грузить ресурсы из специального "built_in_data" модуля.

Перед стартом приложения можно указать имя этого модуля:
var m_cfg = require("config");
m_cfg.set("built_in_module_name", "ИМЯ_МОДУЛЯ");

- если не указывать, то будет значение по умолчанию "built_in_data".

Соответственно, перед загрузкой сцены эти данные уже должны быть доступны/скачаны браузером, т.е. данный модуль уже должен быть готов. Он должен быть примерно таким:
b4w.register("built_in_data", function(exports, require) {
exports["data"] = {
    "my_scene.json": ...,
    "my_scene.bin": ...
}
});

Пример того, как это выглядит, можно увидеть в любой экспортированной в html-сцене. Объект, лежащий в exports["data"], можно сформировать на сервере и отдавать браузеру единым файлом. После того, как он скачается, его нужно будет оформить в виде вышеописанного b4w-модуля и только потом начинать загрузку приложения.
Вообще способ довольно хакерский, так что никто не гарантирует, что структура "built_in_data" не изменится при обновлении движка.
Команда Blend4Web
26 апреля 2017 13:36
Движок может грузить ресурсы из специального "built_in_data" модуля.

Интересная тема, а как это самый модуль сформровать?
Денис
26 апреля 2017 14:36
Интересная тема, а как это самый модуль сформровать?
Нужен объект, где под именем ресурса хранятся собственно данные этого ресурса. JSON хранится в виде строки, а bin-файл и изображения/звуки конвертируюся в формат base64 и опять же в строку. Вот функция, которая конвертирует бинарные данные:
html_exporter.py
Если составите такой объект, то можно будет отдать его с сервера по запросу в виде JSONа. Модуль "built_in_data" сами регистрируете в приложении и, когда придет ответ с сервера, кладете его в exports["data"] этого модуля.
Команда Blend4Web
01 мая 2017 12:32
да уж, пока ясность только общая
Денис
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.