По сенсорам

23 декабря 2016 02:28
Добрый вечер,

Разбираюсь с сенсорами и манифолдами. Уточните, насколько грузят систему сенсоры callback или elapsed сами по себе и при работе с модулем b4w.sfx.is_playing(obj) например?

Можно ли сделать проверку на каждый десятый кадр или каждые 100 мл.сек? Или это не принципиально по сравнению с общим перечнем задач компа или мобильника?
Алексей
23 декабря 2016 10:38
Сами сенсоры грузят незначительно, тут больше важно, какие действия выполняются в пользовательских колбеках. Метод is_playing совсем незаметный.

Проверку, если хочется, можно сделать через setInterval:
setInterval(function() {
	b4w.sfx.is_playing(obj);
}, 100);
Команда Blend4Web
21 мая 2017 06:59
Здравствуйте! Задача запустить анимацию объекта при наведении курсора мыши на другой объект.

первое, что приходит в голову - проверка объекта под курсором мыши:


	var mouse_move_cb = function(obj, id, pulse) {
		var obj = m_scenes.pick_object(event.offsetX, event.offsetY);
		var obj_name = m_scenes.get_object_name(obj);
	
		if (obj_name == 'object_name')
		{
			...
		}
	}	


Навешанная на сенсор движения мыши

	var MouseMove_sensor = m_ctl.create_mouse_move_sensor();
	m_ctl.create_sensor_manifold(sensor_object, "MOUSE_MOVE", m_ctl.CT_CONTINUOUS, [MouseMove_sensor], function(s) { return s[0] }, mouse_move_cb);


Но сенсор create_mouse_move_sensor срабатывает только при нажатой кнопке мыши, как быть?
21 мая 2017 07:42
Как вариант сделал без использования сенсоров, так:

	canvas_cont.onmousemove = function(e) {
		var x = event.offsetX;
		var y = event.offsetY;
		var obj = m_scenes.pick_object(x, y); 
		var obj_name = m_scenes.get_object_name(obj);
		if (obj_name == 'object_name')
		{
			alert ('object!');
		}
 	}


но оно срабатывает только раз на наведение и дает дикую просадку fps при работе
22 мая 2017 12:13
Здравствуйте, сенсоры здесь действительно не нужны, подойдет стандартный обработчик mousemove. Стоит ещё проверять объект, возвращаемый функцией pick_object, т.к. при его отсутствии она вернет null и дальнейшие действия могут приводить к ошибкам:
var obj = m_scenes.pick_object(x, y); 
if (obj) {
    ...
}


но оно срабатывает только раз на наведение и дает дикую просадку fps при работе
mousemove должен срабатывать постоянно при движении мыши, дикой просадки тоже быть не должно. Покажите, что в консоли, есть ли какие-либо ошибки?
Команда Blend4Web
29 мая 2017 17:47
Иван, спасибо! Я уже забыл изза чего была просадка, в итоге пофиксил.

m_scenes.pick_object работает нормально
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.