Две сцены на одной странице

23 ноября 2015 14:07
Добрый день!
Вчера попробовал на одну страницу в два разных канваса поместить две разные сцены… и ничего у меня не получилось ((
Что я сделал:
1. добавил еще один канвас
<div id="canvas_container2"></div>

2. добавил еще один файл со скриптом
<script type="text/javascript" src="Menu.js"></script>
<script type="text/javascript" src="Menu2.js"></script>

3.в этом файле поменял
b4w.register("Menu2", function(exports, require) {
...
canvas_container_id: "canvas_container2",
...
function load() {
    m_data.load("Menu2.json", load_cb);
}
...
b4w.require("Menu2").init();

Вывалил ошибок несколько куч выдал во втором канвасе один элемент из сцены, в первом канвасе ничего не добавилось…
и тут мне показалось, что я что-то делаю не так
не подскажете, что и где нужно поменять?
Дорогу осилит идущий
23 ноября 2015 16:55
Добрый день!
В данном случае вам нужно поправить 3-ий пункт в каждом из js-файлов.
Так как два разных скрипта используют один движок, то для каждого из них нужно создать отдельный экземпляр:
b4w.require("Menu1", "MENU_1").init();

b4w.require("Menu2", "MENU_2").init();

MENU_1 и MENU_2 это уникальные id, создающие два разных пространства имен.
Об этом также есть упоминание в документации.

P. S.
При оформлении поста в первых двух пунктах лучше использовать code=html, так как это его фрагменты
23 ноября 2015 17:16
Спасибо, попробую b4w.require для меня пока заклинание непостижимое . По умолчанию второй параметр имеет значение __b4w_default? где-то эти уникальные id еще будут фигурировать или к ним обращаться придется еще? ) или это только для движка? Простите за глупые вопросы

поправил пост
Дорогу осилит идущий
23 ноября 2015 17:53
Вопросы правильные.
Require и пространство имен нетривиальные темы.
Действительно, по умолчанию пространство имен определяется как __b4w_default. В самих скриптах вам больше нигде не придется использовать эти имена. Однако, если вы будете выполнять отладку в консоли браузера, и захотите оперировать каким-то конкретным пространством, то нужно будет указать соответсвующий id, например:
var main_instance = b4w.require("main", "MENU_2");
main_instance.pause()

Здесь прекратится рендер только одного канваса с id экземпляра MENU_2.
23 ноября 2015 18:06
Спасибо за развернутый ответ, буду постигать

Кстати, может упоминание об этом сделать в уроке Вебмастерам: 3D-веб тремя способами, а то не очень интуитивно, особенно если ламеры типа меня берутся за дело , тем более, думаю Вебмастера, которым адресован урок, наверняка захотят вставить на страницу больше, чем одну сцену
Дорогу осилит идущий
23 ноября 2015 18:32
В скором времени мы добавим более подробное описание в руководство пользователя, так как это более продвинутая информация, нежели в выше указанной статье. К тому же статья писалась, когда поддерживался только один экземрляр движка , а несколько сцен размещались на одной странице с помощью iframe.
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.