Действие с объектом при наведении курсора мыши

17 ноября 2015 15:47
Что-то я совсем заморочился, не могу сам разобраться… не поможете?
я хочу чтобы при наведении курсора на объект что- то произошло, ну например, чтобы другой объект подвинулся.
пишу:
 canvas_elem.onmousemove = main_canvas_onmousemove;
...
function main_canvas_onmousemove (e) {
      var x = e.clientX;
    var y = e.clientY;
    var objME = m_scenes.pick_object(x, y);
    
    if (objME) {
//пытался определить, что этот объект уже был выделен,   _previous_selected_obj  глобальная //переменная  
    if (objME != _previous_MouseBottom_obj) {
    _previous_selected_obj = objME;
console.log(m_scenes.get_object_name(objME));
}

То есть смысл в чем. При наведении на объект объект определился, произошло действие, курсор передвинулся на пиксель, объект опять определился - и опять действие…
с элементами страницы работает onmouseover, а как с объектами такое реализовать?
может в движке уже специальные функции для этого?
посмотрел, может сенсоры, нифига не понял
Дорогу осилит идущий
17 ноября 2015 16:58

а как с объектами такое реализовать?

Ну, по-идее также, как и с элементами страницы:

1. При наведении курсора-
var objME = m_scenes.pick_object(x, y);

2. Далее можно проверить, тот ли это объект, который нужен.

m_scenes.get_object_name(objMe);
if(objMe =="ObjectName"){
-Делай раз-
}else{
-Ничего не делай-
}


А чтобы постоянно производилось действие, пока курсор на объекте, тут либо сенсоры, либо обернуть функцию в конструкцию setTimeout.
Тогда покуда onmouseover = TRUE, будет выполняться действие с задержкой, заданной в миллисекундах.

setTimeout(function(){
.......
     Какое-то действие.
........
}, 1000); //задержка в милkисекундах


Но на практике последний вариант у меня выдавал неоднозначные результаты- наложение нажатий друг на друга.
Коплю деньги на коммерческий B4W.
17 ноября 2015 17:03
ну да, он равен. сместил на пиксел - и он тоже равен - и опять делает, еще на пиксел - и опять равен
Дорогу осилит идущий
17 ноября 2015 17:13

сообщений: 43
ну да, он равен. сместил на пиксел - и он тоже равен - и опять делает, еще на пиксел - и опять равен
Я правильно понял:
1. наводим мышку на кубик1
2. Пока мышка на кубике1, двигается кубик2
3. Убираем мышку с кубика1- движение кубика2 прекращается.
Коплю деньги на коммерческий B4W.
17 ноября 2015 17:14

обернуть функцию в конструкцию setTimeout.
Тогда покуда onmouseover = TRUE, будет выполняться действие с задержкой, заданной в миллисекундах.

setTimeout(function(){
…….
Какое-то действие.
……..
}, 1000); //задержка в милkисекундах


Но на практике последний вариант у меня выдавал неоднозначные результаты- наложение нажатий друг на друга.
Коплю деньги на коммерческий B4W.
17 ноября 2015 17:18

2. Пока мышка на кубике1, двигается кубик2

нет… в том то и дело, что должно сработать только один раз, как onmouseover, то есть когда курсор зашел на элемент, ну и соответственно потом когда ушел с него.
Наведите курсор на смайлик справа от окна сообщения - он подсветится, уберите - он не светится) примерно то же самое
Дорогу осилит идущий
17 ноября 2015 17:49

когда курсор зашел на элемент, ну и соответственно потом когда ушел с него.

Здесь нужно добавлять к canvas EventListener "mouseover" и запускать функцию Вашу.
Я вижу это так:
canvas_elem.addEventListener("mouseover", move_cube){}
.........

function move_cube(){

var objME = m_scenes.pick_object(x, y);
var objName = m_scenes.get_object_name(objMe);
if(objName =="Cube1"){
-Делай раз-
}else{
-Ничего не делай-
}


}


Я это так вижу.
Коплю деньги на коммерческий B4W.
17 ноября 2015 17:54
я сначала так и сделал. но ведь это событие на mouseover канваса, то есть когда мышь зайдет на сам канвас, а не на объект, который в канвасе
Дорогу осилит идущий
17 ноября 2015 18:00

а не на объект, который в канвасе
Ах да….
Пока нет идей, кроме как сделать анкор к объекту и за анкором прозрачный html-элемент такскать, при наведении на который будет срабатывать функция.
Коплю деньги на коммерческий B4W.
17 ноября 2015 18:16

Ответ на сообщение пользователя Dragon3DGraff
нет… в том то и дело, что должно сработать только один раз, как onmouseover, то есть когда курсор зашел на элемент, ну и соответственно потом когда ушел с него.
Наведите курсор на смайлик справа от окна сообщения - он подсветится, уберите - он не светится) примерно то же самое

Посмотрите реализацию функции enable_mouse_hover_outline (и objects_outline) из mouse.js. Вы описали ее действие в этом сообщении
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.