Форум

Сообщения, созданные пользователем Иван Любовников
16 ноября 2016 14:37
Я так полагаю, что заминка на этапе сбора перечня объектов. У меня есть файл, в котором я заранее собираю все переменные и там есть определение объектов. Так как load_cb вызывается после первого json, то vars не получает весь список объектов.
Да, именно в этом дело.

Вот думаю, если сделать отдельную функцию, которую вызвать callback после загрузки последнего json. А Вы такого рода объекты с перечнем чего-либо меняющегося динамически предусматриваете или каждый раз вызываете подбор объектов? Или делаете переменную с перечнем имен ключевых объектов, а потом их каждый раз собираете?
Ну я не припомню, чтобы у нас такие задачи возникали, чтобы менять сразу все объекты . Но вариант с отдельной функцией подходит. Нужно сделать глобальный массив объектов, а каждому json-у назначить колбек по загрузке (как и load_cb для первого). Колбек вызывает отдельную функцию, в которой добавляются новые объекты в этот массив. Проверить, какие объекты были добавлены в конкретно этом json-е можно по их data_id (грубо говоря - счетчику json-ов):

function load_cb(data_id) {
    var objs = m_scenes.get_all_objects("MESH", data_id);
}


По динамической загрузке можете посмотреть этот туториал: Меблируем комнату. Часть 1: Динамическая загрузка.

А это все потому-что самому приходится ковырять js.
Ковырять вообще полезно - понимание только улучшится. А такие заминки у вас просто от небольшой практики программирования.
16 ноября 2016 12:59
При разделении на разные json для ускорения загрузки картинки текстур переключаются только для первого json. Что делать?
А ошибки в консоли есть? Текстуры меняете после загрузки 2-го json'а?
16 ноября 2016 12:26
Я понимаю, что можно привязать камеру, быстро нажать право-лево и выровнять его, но тут вопрос принципа - почему такое поведение персонажа и что надо сделать, чтобы корректно передавать ему координаты вектора?
А метод m_phy.set_character_rotation работает? С ним, вроде, не должно быть проблем. Вообще, можете прислать проект? Без кода сейчас непонятно, что происходит.

Какая-то прямо скажем ООЧЕНЬ большая разница между работой dev версии и build.
В build-версии весь код обфусцируется при компиляции в целях уменьшения размера, попробуйте вывести в консоль какой-нибудь объект - сразу увидите.
Поэтому прямо внутрь объектов залезть не получится. По-хорошему этого и не нужно делать, иначе есть вероятность получить непредсказуемые последствия, к тому же вы можете не знать, как взаимосвязаны те или иные свойства и, что они могут означать. Cо стороны пользователя объект должен представлять собой "черный ящик", а применять к нему нужно только методы API - в этом случае пользователь не должен задумываться о внутренней реализации объекта - это распространенный принцип.

Поэтому код надо переписать следующим образом:
var objs = [];
var excl_objs = ['Character'];
    
m_scs.get_all_objects("MESH").forEach(function(i){
    var name = m_scs.get_object_name(i);
    if (!excl_objs.includes(name) && name.indexOf("%meta") != 0) {
        console.log(name);
        objs.push(i);
    };    
});

exports.objs = objs;

i.name, i.type и i.bpy_origin - не стоит так брать, поэтому их можно заменить проверкам: "MESH" - параметр функции
get_all_objects, name - результат вызова m_scs.get_object_name, только с bpy_origin заминка - сейчас специального метода нет (добавим к этому релизу), поэтому можно проверить, что имя начинается не с "%meta" как у побочных объектов.

А в консоли по билд версии такая надпись начала красоваться:
objs = b4w.scenes.get_all_objects()
VM41769:1 Uncaught TypeError: Cannot read property 'get_all_objects' of undefined(…)
То же самое - так обращаться в скомпилированной версии нельзя. Нужно через метод require:
objs = b4w.require("scenes").get_all_objects()
15 ноября 2016 10:31
У меня и так вся цепочка на NLA, но тайм линия стартует не сразу.
У меня сначала интерфейс, кнопочки всякие заполняют экран, через Play Animation.
А только потом после запуска анимационного этапа стартует тайм линия.
Понятно, ну тогда, да, только stop timeline подойдет.

Не совсем понимаю. Ведь у частиц нет своего экшена, который можно указать в Play Animation.
Есть, нужно указать имя системы частиц: ссылка.
14 ноября 2016 17:56
Добрый день, уточните, почему если я меняю параметры volume в переменных объекта speaker громкость не меняется? Что нужно, чтобы можно было без функции менять параметры объектов, если я до них добрался и хочу с ними поработать?
Работать с объектами стоит только через API, т.к. простое изменение свойств, скорее всего, ни к чему не приведет. Многие действия с объектами движка требуют дополнительных расчетов, принудительных обновлений и т.д., которые и производятся при вызове апишных функций.
Для изменения громкости нужно использовать метод set_volume модуля speakers.
14 ноября 2016 17:49
Хорошо, тогда посоветуйте способ управления камерой, если у меня есть перечень объектов в виде массива, а дальше будет скрипт, перемещающий камеру от одного к другому. Нужен перечень корректно работающих функций. Пример с яблоками из кодасниппетс мне подойдет или есть еще удобные функции?
Да, пример из code snippets лучше всего подойдет.

Скажите, вытащить координаты центра меша (боундари бокса) можно из объектов? А то у меня модель импортирована и центр координат для всех объектов в нуле.
Для этого есть метод get_object_center из модуля transform.
14 ноября 2016 10:22
Не нашел в API функции смены проекции камеры (перспективный\ортогональный).
Такое сейчас не поддерживается, но в планах на будущее есть.
13 ноября 2016 01:36
Hi!
Unfortunately, this output isn't supported. You can find which node is fully/partially supported here in the doc: link.

But there is a workaround. The information about shadows is contained in the Color output of the Material node. You can try to analyze this output and distinguish lit pixels from the shaded ones.

I've made a simple example to give you an idea: logo.blend.
I doubt that this example will work in any case. The way you should differ the shaded pixels depends on your scene, ambient color, lamps and so on. So, the node setup should be properly tuned for a certain scene.
13 ноября 2016 00:38
I haven't seen the post in the submission/entry forum so it was a nice surprise.
The other entries were on the russian forum here: https://www.blend4web.com/ru/forums/topic/2416/
13 ноября 2016 00:31
Hi!
You can insert a keyframe by pressing the I key when the cursor is above the corresponding input field. Blend4Web supports the animating of Value and RGB nodes only. Please, look at the documentation here: link.