Форум

Параметры объектов

25 октября 2016 06:00 #13045
Где можно взять простейший пример изменения свойства объекта (например запуск анимаци или изменение положения объекта) посредством js, от начала до конца по шагам)

Я застрял на этапе: var sphere = m_scenes.get_object_by_name ("sphere");

Получаю сообщение : B4W ERROR: get object sphere: not found
25 октября 2016 10:26 #13047
по преобразованиям в пространстве есть этот урок: Простейшие манипуляции в трехмерном пространстве

по анимации можете посмотреть в этом туториале: Создание интерактивного веб-приложения

Получаю сообщение : B4W ERROR: get object sphere: not found
скорее всего из-за неправильного имени объекта, проверьте, может должно быть "Sphere"

Где можно взять простейший пример
простые примеры ещё будем в документацию по API добавлять прямо под описанием методов, правда пока их практически нет

в мануале ещё есть отдельные примеры, но их тоже не очень много, вот например по камере: Управление через API
что-то по объектам можно найти непосредственно в разделе про них: Объекты
Команда Blend4Web
26 октября 2016 15:05 #13104
Спасибо огромное)
27 октября 2016 18:16 #13130
Я к сожалению не совсем понимаю, что, куда писать(

SOS!

Есть объект obj, у него есть анимация которая должна циклически повторяться все время работы приложения, при этом скорость воспроизведения анимации зависит от угла под которым обращена к нему камера. Так же в слотах объекта храниться дополнительная анимация, которая должна проигрываться один раз при определенном значении угла камеры.

Первую задачу я решил, но подозреваю, что очень криво, т.к. весь код срабатывает на движение мыши, так что в принципе можно забыть об оптимизации.

function mouse_move_cb(move_event) {

	var camera = m_scenes.get_active_camera();
	var angleObject = m_scenes.get_object_by_name("AngleObject");
	m_constraints.append_track(angleObject, camera);
	var angleToSpeed = m_transform.get_rotation(angleObject);
	var speed = angleToSpeed[2]*5;
	var obj = m_scenes.get_object_by_name("cube");
	if (speed > 0){
		m_anim.set_speed(obj, speed);
	}
}



В результате возникает вторая проблема. Нельзя туда же записать старт дополнительной анимации, т.к. она начинается сначала, если двинуть мышью:(

Как написать изменение скорости анимации объекта не на движение мыши а на изменение положения камеры например? Двинул камерой, поменялась скорость на некое значение…

Help me!
28 октября 2016 12:08 #13154
Как написать изменение скорости анимации объекта не на движение мыши а на изменение положения камеры например?
Правильно, что на мышь не стоит завязываться, т.к. камеру можно и с клавиатуры двигать. Здесь нужно использовать motion-сенсор вот таким образом:

var cam = m_scenes.get_active_camera();
var move_sensor = m_ctl.create_motion_sensor(cam, 0.001, 0.001);

var cam_move_cb = function(obj, id, pulse) {
	// расчет скорости
}

m_ctl.create_sensor_manifold(cam, "CAM_MOVE", m_ctl.CT_POSITIVE,
            [move_sensor], function(s) { return s[0] }, cam_move_cb);


Вторая проблема все равно может остаться, например, если двигать по радиусу target-камеру - движение происходит, а угол не меняется. При старте анимации можно сделать проверку, есть ли сейчас анимация на объекте, либо через is_play, либо по глобальному флагу, который можно менять в finish_callback метода play.
Команда Blend4Web
28 октября 2016 13:20 #13156
Все, я попробовал и до меня дошло) Все работает, все получилось! Спасибо)
28 октября 2016 13:37 #13158
.
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.