pc.TouchDevice — это класс, предоставляющий доступ к
сенсорным событиям, таким как прикосновения, свайпы и другие жесты, на
устройствах с сенсорными экранами. Этот класс является частью библиотеки
PlayCanvas и используется для обработки ввода с сенсорных экранов, что
позволяет создавать более интуитивно понятные и адаптированные для
мобильных устройств приложения.
pc.TouchDeviceКласс pc.TouchDevice предоставляет несколько свойств и
методов для работы с сенсорным вводом. Рассмотрим его ключевые
возможности:
Свойство touches. Это свойство
возвращает массив всех текущих касаний, зарегистрированных на экране
устройства. Каждый объект в массиве представляет собой одно
прикосновение и включает информацию о его положении, идентификаторе,
состоянии (активно ли касание) и времени его начала.
События касаний. Класс предоставляет несколько
событий, таких как touchstart, touchmove,
touchend и touchcancel, которые используются
для отслеживания различных фаз прикосновения.
touchesСвойство touches класса pc.TouchDevice
является массивом объектов типа pc.Touch, каждый из которых
представляет одно касание на экране. Оно может быть использовано для
получения информации о всех активных касаниях на экране в любой момент
времени.
Каждый объект pc.Touch включает следующие основные
данные:
Пример использования touches:
var touches = app.touchDevice.touches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
console.log("Касание ID: " + touch.id);
console.log("Координаты: (" + touch.x + ", " + touch.y + ")");
}
Этот код позволяет отобразить информацию о каждом активном касании на экране, включая его уникальный идентификатор и текущие координаты.
Класс pc.TouchDevice также поддерживает несколько
событий для обработки разных стадий касания. Рассмотрим каждое из
них.
touchstartЭто событие возникает в момент, когда пользователь начинает касаться
экрана. Оно инициирует начало взаимодействия и передает объект
pc.Touch, содержащий информацию о начале касания.
Пример использования:
app.touchDevice.on('touchstart', function (event) {
var touch = event.touch;
console.log("Начато касание с ID: " + touch.id);
});
touchmoveЭто событие возникает, когда прикосновение перемещается по экрану. Оно продолжает отслеживать движение пальца или другого объекта по экрану и обновляет координаты касания.
Пример использования:
app.touchDevice.on('touchmove', function (event) {
var touch = event.touch;
console.log("Касание с ID " + touch.id + " перемещается на (" + touch.x + ", " + touch.y + ")");
});
touchendЭто событие возникает, когда прикосновение завершено — пользователь
убрал палец с экрана. Оно передает объект pc.Touch, который
сообщает о завершении взаимодействия.
Пример использования:
app.touchDevice.on('touchend', function (event) {
var touch = event.touch;
console.log("Касание с ID " + touch.id + " завершено");
});
touchcancelЭто событие возникает, если прикосновение было отменено по каким-то причинам (например, если устройство теряет сенсорный сигнал). Обычно оно используется для предотвращения неправильной обработки касания.
Пример использования:
app.touchDevice.on('touchcancel', function (event) {
var touch = event.touch;
console.log("Касание с ID " + touch.id + " было отменено");
});
PlayCanvas позволяет обрабатывать несколько касаний одновременно, что делает возможными такие жесты, как масштабирование и вращение. Для этого необходимо отслеживать все активные касания и обрабатывать их в соответствующих обработчиках событий.
Пример:
app.touchDevice.on('touchstart', function (event) {
var touch = event.touch;
console.log("Начато касание ID: " + touch.id);
});
app.touchDevice.on('touchmove', function (event) {
var touch = event.touch;
console.log("Касание ID " + touch.id + " перемещается на (" + touch.x + ", " + touch.y + ")");
});
app.touchDevice.on('touchend', function (event) {
var touch = event.touch;
console.log("Касание ID " + touch.id + " завершено");
});
В этом примере, каждый раз при начальной, средней и завершённой фазах касания будет выведено сообщение о его состоянии и координатах.
Используя информацию о нескольких касаниях, можно реализовать сложные жесты, такие как масштабирование (пинч-зум) и вращение. Для этого требуется следить за изменением расстояния между двумя касаниями или углами между ними.
Пример для обработки пинч-зума:
var initialDistance = 0;
app.touchDevice.on('touchstart', function (event) {
if (event.touches.length === 2) {
var touch1 = event.touches[0];
var touch2 = event.touches[1];
initialDistance = Math.sqrt(
Math.pow(touch2.x - touch1.x, 2) + Math.pow(touch2.y - touch1.y, 2)
);
}
});
app.touchDevice.on('touchmove', function (event) {
if (event.touches.length === 2) {
var touch1 = event.touches[0];
var touch2 = event.touches[1];
var currentDistance = Math.sqrt(
Math.pow(touch2.x - touch1.x, 2) + Math.pow(touch2.y - touch1.y, 2)
);
var scaleFactor = currentDistance / initialDistance;
console.log("Масштабирование: " + scaleFactor);
}
});
В этом примере определяется расстояние между двумя касаниями в момент начала и в процессе их перемещения. По изменению этого расстояния рассчитывается коэффициент масштабирования.
Класс pc.TouchDevice предоставляет мощный инструмент для
работы с сенсорным вводом в приложениях PlayCanvas. Он поддерживает
множество типов событий, позволяя отслеживать касания, их перемещения и
завершение. Использование этого класса дает возможность реализовывать
различные жесты, такие как масштабирование и вращение, что делает
приложения более удобными и интуитивно понятными на мобильных
устройствах.