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 в вашем конструкторе, чтобы указать границы прокрутки спрайта.