Tutorials

Сенсорные джойстик-контролы

Нажмите здесь, чтобы увидеть проект.

Обзор

В этом учебнике представлена библиотека Touchscreen Joypad, которую можно установить и настроить для любого проекта, которому требуются сенсорные контролы.

Мы рекомендуем ознакомиться с системой пользовательского интерфейса PlayCanvas, если вы еще не использовали ее, так как она используется для отображения и позиционирования контролов для этой библиотеки.

Установка

Откройте пример проекта, щелкните правой кнопкой мыши на папке 'touch-joypad' и выберите 'Копировать'.

Откройте свой проект, щелкните правой кнопкой мыши на панели ассетов и выберите 'Вставить'

Добавление джойстика

В папке, которую мы только что вставили, откройте папку 'templates', и там будут 4 предварительно настроенных шаблона для джойстиков, охватывающих наиболее распространенные варианты использования.

Для этого примера давайте использовать шаблон 'Left Half Touch Joystick'.

Создайте 2D-экран Entity и добавьте шаблон в качестве дочернего элемента экрана Entity.

Джойстик состоит из трех Entity:

Область ввода будет прослушивать сенсорные и мышиные (для отладки) события, а также останавливать их распространение.

Это означает, что любые элементы пользовательского интерфейса под этим и любые события pc.Mouse или pc.Touch не будут вызываться, если сначала будет взаимодействовать с этой областью.

Поскольку область ввода является элементом пользовательского интерфейса, ее можно позиционировать, изменять размер и закреплять в соответствии с вашими потребностями с помощью системы компоновки пользовательского интерфейса.

Он также имеет 'touchJoystick', который содержит всю логику и атрибуты для джойстика. Каждый атрибут имеет всплывающие подсказки, описывающие, для чего они предназначены, с некоторыми подробностями ниже.

Базовые и ручка Entity управляются скриптом и являются элементами пользовательского интерфейса. Если вы хотите, чтобы джойстик находился в другом месте, чем в шаблоне, пожалуйста, расположите и закрепите базовый Entity там, где вам нужно, а не область ввода.

Типы поведения

Существует 3 типа поведения для джойстика, которые обычно встречаются в сенсорных играх и приложениях.

'Фиксированный на месте', где основание джойстика не двигается от своей позиции:

'Перемещение к первому касанию и фиксация', где основание джойстика перемещается туда, где пользователь впервые касается области ввода, а затем остается на месте:

'Перемещение к первому касанию и перетаскивание', где основание джойстика перемещается туда, где пользователь впервые касается области ввода, а затем перетаскивается, когда пользователь перетаскивает за пределы диапазона джойстика:

Это можно изменить во время выполнения, поэтому можно добавить это в качестве пользовательской опции в приложении в рамках настроек приложения.

Чтение значений джойстика

Красный круг - это мертвая зона, и если позиция ручки находится внутри этого круга, значение от джойстика вернет 0 для обеих осей. Синий круг - это диапазон, и ручка не может выйти за пределы этого круга.

Значения всегда нормализуются между -1 и 1 по обеим осям на основе того, где находится ручка между мертвой зоной (красный круг) и диапазоном (синий круг).

Размер кругов можно установить в редакторе через атрибуты скрипта.

Значения джойстика можно получить в коде из глобального объекта Javascript window.touchJoypad.sticks с идентификатором. По умолчанию идентификатором является 'joystick0', но его можно изменить в редакторе в скрипте для более конкретного обозначения.

Пример кода:

// Получить джойстик по идентификатору из глобального объекта
var joystick = window.touchJoypad.sticks['joystick0'];

// Получить нормализованные значения обеих осей джойстика и вывести в консоль
console.log('X: ' + joystick.x + ', Y: ' + joystick.y);

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

Добавление своих кнопок

Кнопки - это элементы пользовательского интерфейса с фиксированным положением на экране. Шаблон для кнопки находится в папке "templates" и должен быть добавлен в качестве дочернего элемента Entity экрана.

Поскольку это элементы пользовательского интерфейса, их можно размещать, изменять размер и закреплять специально для ваших потребностей с помощью системы компоновки пользовательского интерфейса.

Как и джойстики, у них есть идентификатор, чтобы их можно было получить в коде из глобального объекта Javascript window.touchJoypad.buttons с использованием следующего API.

Название функции Описание
isPressed Принимает идентификатор кнопки и возвращает true, если кнопка в данный момент нажата.
wasPressed Принимает идентификатор кнопки и возвращает true, если кнопка была нажата с момента последнего кадра.
wasReleased Принимает идентификатор кнопки и возвращает true, если кнопка была отпущена с момента последнего кадра.
wasTapped Принимает идентификатор кнопки и возвращает true, если кнопка была нажата и отпущена в течение 200 мс. То есть быстрый нажим.

Джойстики также являются кнопками, что дает дополнительную гибкость в их использовании. Например, использование API wasTapped с идентификатором джойстика может действовать как ввод L3/R3 на контроллере PlayStation.

Пример кода:

// Получить глобальный объект кнопки
var buttons = window.touchJoypad.buttons

// Проверить, была ли кнопка нажата с момента последнего кадра
console.log('Была нажата: ' + buttons.wasPressed('button0'));

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

This site is translated by the community. If you want to get involved visit this page