Форум

КАК? сделать изменение курсора при наведении на объекты на сцене используя логику b4w

23 ноября 2017 22:04
КАК сделать изменение курсора при наведении на объекты на сцене используя логику b4w
именно при наведении, а не клике на объекте

может есть такая нода или еще как то отследить и поменять в браузере через API документа.

Основное это конечно, как отследить ну и заменить прозрачно для пользователя
Денис
24 ноября 2017 12:25
В данный момент нет такой ноды. В таких случаях можно использовать ноду JS Callback

Для определения того, что объект находится под мышкой можно использовать функцию pick_object. Но лучше не вызывать эту функцию каждый кадр, поскользу это может сказаться на производительности, ведь при каждом вызове происходит рендеринг color-picking сабсцены, а это довольно дорого.
Дешевле кастить луч физическим движком как в этой демке.

Вот пример по замене курсора
Александр (команда Blend4Web)
twitter
24 ноября 2017 13:20
Ответ на сообщение пользователя Александр Романов
В данный момент нет такой ноды. В таких случаях можно использовать ноду JS Callback


про примеры посмотрю, что получитсчя.. Спаисбо

Все же сделали бы вы ноду такую, было бы очень удобно, думаю, что многим нужно?
плюсуйте если кому надо +1
Денис
24 ноября 2017 17:32
КАК сделать изменение курсора при наведении на объекты на сцене используя логику b4w
я делал логикой DOM

"если под мышкой есть объект (ну, или конкретный по имени, то )
document.getElementById("main_canvas_container").style.cursor = "pointer";

можно поставить любой png файл, и даже анимацию (через jQuery еще легче)

не сильно понимаю выгоды встроенной функции b4w
24 ноября 2017 20:57
Ответ на сообщение пользователя ice99
я делал логикой DOM
не сильно понимаю выгоды встроенной функции b4w

да, логикой ДОМ можно отдетектить канвас на котором выводится рендеринг,
но как я понимаю( поправьте меня если я не прав) внутренние объекты , которые мне нужны
( не все объекты сцены), а например определенные на которых должен меняться курсор , так не отловить.
Денис
24 ноября 2017 21:21
да, логикой ДОМ можно отдетектить канвас на котором выводится рендеринг,
но как я понимаю( поправьте меня если я не прав) внутренние объекты , которые мне нужны
( не все объекты сцены), а например определенные на которых должен меняться курсор , так не отловить.
Да что ж вы такое говорите. Я без проблем отлавливаю.
main_canvas_container.onmousemove = hover_object;


сама функция

    function hover_object(e) { 
    	var x = e.clientX; // Считываем координату Х мышки
    	var y = e.clientY; // Считываем координату Y мышки
    	Hovered_Object = m_scenes.pick_object(x, y); // Пытаемся получить объект под мышкой
    	if (Hovered_Object) { // Если объект под мышкой не null - запускаем цикл
    		Hovered_Object_name = m_scenes.get_object_name(Hovered_Object); //Получаем имя объекта под мышкой
    		if (Hovered_Object_name == "MyObject") {
    			document.getElementById("main_canvas_container").style.cursor = "pointer"; // Меняем стиль курсора на стрелку
    		} else { // Если под мышкой нет объекта (либо объект не является выделяемым)
    			document.getElementById("main_canvas_container").style.cursor = "default"; // Меняем стиль курсора на стрелку
    		}
    	}
24 ноября 2017 21:53
MyObject - эт поименованные объекты из сцены?
Денис
25 ноября 2017 00:58
Ответ на сообщение пользователя ДЕНИС
MyObject - эт поименованные объекты из сцены?
ну да. наверное можно и специальный признак-группу создать, да хоть по материалу менять курсор (т.е. над одним материалом один курсор, над другим материалом другой). Можно признаки искусственно создать через json-файл и далее его парсить. Я показал общий принцип.
25 ноября 2017 02:21
Ответ на сообщение пользователя ice99
ну да. наверное можно и специальный признак-группу создать, да хоть по материалу менять курсор (т.е. над одним материалом один курсор, над другим материалом другой). Можно признаки искусственно создать через json-файл и далее его парсить. Я показал общий принцип.

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