Создание симуляции клавиш для мобильной версии игры
Разрабатываю браузерную игру на чистом JavaScript с использованием processing.js. На компьютере все работает отлично, но нужно адаптировать под мобильные устройства.
Нашел код для определения свайпов:
function detectTouch(element, handler){
var surface = element,
direction,
beginX,
beginY,
deltaX,
deltaY,
minDistance = 120,
maxDeviation = 80,
timeLimit = 250,
duration,
touchStart,
processSwipe = handler || function(direction){}
surface.addEventListener('touchstart', function(evt){
var touch = evt.changedTouches[0]
direction = 'none'
beginX = touch.pageX
beginY = touch.pageY
touchStart = new Date().getTime()
evt.preventDefault()
}, false)
surface.addEventListener('touchend', function(evt){
var touch = evt.changedTouches[0]
deltaX = touch.pageX - beginX
deltaY = touch.pageY - beginY
duration = new Date().getTime() - touchStart
if (duration <= timeLimit){
if (Math.abs(deltaX) >= minDistance && Math.abs(deltaY) <= maxDeviation){
direction = (deltaX < 0)? 'left' : 'right'
}
else if (Math.abs(deltaY) >= minDistance && Math.abs(deltaX) <= maxDeviation){
direction = (deltaY < 0)? 'up' : 'down'
}
}
processSwipe(direction)
evt.preventDefault()
}, false)
}
Использую так:
detectTouch(gameElement, function(dir){
if (dir == 'left')
console.log('Свайп влево обнаружен!')
});
Функция движения персонажа выглядит так:
var controlCharacter = function(){
if(currentKey === ARROW_LEFT){
posX -= 4*gameScale;
}
if(currentKey === ARROW_RIGHT){
posX += 4*gameScale;
}
if(currentKey === ARROW_UP){
posY -= 4*gameScale;
}
if(currentKey === ARROW_DOWN){
posY += 4*gameScale;
}
};
if(isKeyDown){
controlCharacter();
}
Как заставить детектор свайпов симулировать нажатие клавиш для управления персонажем?