Форум

Как поменять клавиши мыши в управлении камерой?

07 октября 2016 14:10 #12500
В общем суть такова, камера с типом Hover вроде подходит.
Однако, по умолчанию паннинг забинден на левую клавишу мыши, а вращение на правую.
Хотелось бы сделать наоборот (ЛКМ-вращение, ПКМ-паннинг)
За логику камеры насколько я понял отвечает "ext_camera.js", но я боюсь туда влазить, т.к. возможно моё вмешательство где-нибудь создаст глюк.

Как лучше поменять клавиши?
07 октября 2016 16:03 #12501
Конкретно за обработку мыши и клавиатуры отвечает аддон app.js, который просто подает нужные значения через API.
Можно поправить аддон - это не так страшно, т.к. он не часть движка, а построен на его API.

Вам нужно вот это место: app.js. Там как раз по нажатой кнопке определяется нужное действие. В режиме HOVER можно поменять кнопки местами, например, так:

var mouse_cb = function(obj, id, pulse, param) {
    if (pulse == 1) {
        var value = m_ctl.get_sensor_value(obj, id, 1);

        m_cam.get_velocities(obj, velocity);
        if (!use_hover) {
            var left_mult  = TARGET_EYE_MOUSE_ROT_MULT_PX * velocity.rot;
            var right_mult = TARGET_EYE_MOUSE_PAN_MULT_PX * velocity.trans;
        } else {
            var left_mult  = HOVER_MOUSE_PAN_MULT_PX * velocity.trans;
            var right_mult = HOVER_MOUSE_ROT_MULT_PX * velocity.rot;
        }

        var button = m_ctl.get_sensor_payload(obj, id, 0).which;
        if (use_hover)
            if (button == 1)
                button = 3;
            else if (button == 3)
                button = 1;

        if (button === 1) {
            dest_x_mouse += (param == "X") ? -value * left_mult : 0;
            dest_y_mouse += (param == "Y") ? -value * left_mult : 0;
        } else if (button === 2
                || button === 3) {
            dest_pan_x_mouse += (param == "X") ? -value * right_mult : 0;
            dest_pan_y_mouse += (param == "Y") ? -value * right_mult : 0;
        }
    }
}
Команда Blend4Web
07 октября 2016 16:46 #12502
Нашел эти строки (988-1010) в файле app.js, находящемуся по адресу "blend4web_ce_16_09_1\blend4web_ce\src\addons"
Произвёл замену, как вы написали.
В итоге перестала работать и левая и правая кнопка (единственная свобода - зуммирование колесом).
Сервер перезапускал, кэш чистил.
Синтаксис вашего участка валидный. В консоли ошибок нет.
Прикрепил исправленный app.js , однако он, к сожалению не рабочий.
07 октября 2016 17:14 #12503
странно, у меня ваш файл работает

можно подебажить,
например, если закомментировать следующие строчки, то все должно работать по старому:
        if (use_hover)
            if (button == 1)
                button = 3;
            else if (button == 3)
                button = 1;

здесь вообще 1 означает лев. клавишу, 2 - колесо, 3 - правую

по этим условиям:
        if (button === 1) {
            dest_x_mouse += (param == "X") ? -value * left_mult : 0;
            dest_y_mouse += (param == "Y") ? -value * left_mult : 0;
        } else if (button === 2
                || button === 3) {
            dest_pan_x_mouse += (param == "X") ? -value * right_mult : 0;
            dest_pan_y_mouse += (param == "Y") ? -value * right_mult : 0;
        }

- для 1 осуществляется поворот; для 2,3 - паннинг, вроде ничего особенного больше не должно происходить
Команда Blend4Web
07 октября 2016 17:28 #12504
Прикрепил файл тестовой сцены и наглядную разницу в кодах двух файлов.
07 октября 2016 17:43 #12505
ааа, все понял, это просто у меня движок с изменениями, которые были после последнего релиза - он не соответствует тому, что у вас

просто замените эту строчку:
var button = m_ctl.get_sensor_payload(obj, id, 0).which;

на такую:
var button = m_ctl.get_sensor_payload(obj, id, 0);
Команда Blend4Web
07 октября 2016 17:55 #12506
Спасибо, заработало!
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.