Haxe: обработка событий горизонтальной прокрутки

Я недавно начал использовать Haxe, так что извините, если мой вопрос имеет очевидный ответ или если мое описание проблемы немного небрежно, но я постараюсь объяснить это.

Я работаю на ноутбуке с трекпадом, поддерживающим мультитач, и обычной оптической мышью только с колесом вертикальной прокрутки (там нет горизонтального нажатия). Я ищу способ обработки ввода / событий горизонтальной прокрутки. События мыши в OpenFL достаточно хорошо поддерживают вертикальную прокрутку. Как прокрутка мышью, так и прокрутка трекпада двумя пальцами отлично работают для вертикальной оси. Похоже, одно и то же событие генерируется при использовании любого из этих методов ввода, что понятно. Но я не могу найти событие, которое будет генерироваться при выполнении горизонтальной прокрутки. Панель трека позволяет выполнять горизонтальную прокрутку, поскольку веб-браузеры реагируют на команду, но я не могу найти способ заставить мою программу реагировать на этот ввод. Функция "onMouseWheel" Lime также не отвечает на входные данные. Ребята, есть ли у вас какие-либо предложения по сбору данных такого рода для приложения, предназначенного для Windows?

заранее спасибо

ОБНОВЛЕНИЕ: То, что я ищу здесь, это не вопрос прокрутки экрана по горизонтали, а как распознать событие горизонтальной прокрутки, исходящее от оборудования, например, два пальца на трекпаде или боковой щелчок среднего колеса мыши, лайма onMouseWheel имеет два параметра, deltaX а также deltaY, но не запускаются события, которые возвращают ненулевое значение deltaX значение. Вертикальная прокрутка запускает событие, которое возвращает deltaX = 0 и deltaY = +/- 1, но горизонтальная прокрутка даже не вызывает событие.

1 ответ

Это можно сделать несколькими способами. Во-первых, это добавить обработчик события к колесу мыши для экземпляра объекта, к которому вы хотите присоединить обработчик события, поэтому MouseEvent.MOUSE_WHEEL и используйте дельта-переменную, чтобы определить направление прокрутки. Вам также может понадобиться обработать событие нажатия клавиши, которое позволяет горизонтальную прокрутку вместо вертикальной.

Пример кода:

mySprite.addEventHandler(MouseEvent.MOUSE_WHEEL, onScroll);
mySprite.addEventHandler(KeyboardEvent.KEY_DOWN, onKeyDown);
mySprite.addEventHandler(KeyboardEvent.KEY_UP, onKeyUp);

...
private var horizontal:Bool;
private function onScroll(e:MouseEvent):Void
{
    if (e.delta > 0 && horizontal)
        mySprite.scrollRect.x++;
    else if (e.delta < 0 && horizontal)
        mySprite.scrollRect.x--;
}

private function onKeyDown(e:KeyboardEvent):Void
{
    if (e.keyCode == 18)
         horizontal = true;
}

private function onKeyUp(e:KeyboardEvent):Void
{
    if (e.keyCode == 18)
         horizontal = false;
}

Вам нужно будет определить scrollRect в вашем конструкторе, чтобы указать границы прокрутки спрайта.

Другие вопросы по тегам