Зависания при нажатии на экран
Почему то при обработке функции которая отвечает за касания на экране происходят подвисания. У меня есть игра, которая каждый кадр вызывает функцию mobileController, она проверяет если нажатие на экране. Вот код:
/
var button1 = undefined,
button2 = undefined;
function mobileController() {
var el = document.getElementsByTagName('body')[0];
el.addEventListener("touchstart", handleStart, false);
el.addEventListener("touchend", handleEnd, false);
el.addEventListener("touchmove", handleMove, false);
function handleStart(evt) {
var touches = evt.changedTouches;
if (window.innerWidth / 2 < touches[0].pageX)
button1 = true;
button2 = false;
if (window.innerWidth / 2 > touches[0].pageX) {
button2 = true;
button1 = false
}
}
function handleEnd(evt) {
var touches = evt.changedTouches;
if (window.innerWidth / 2 < touches[0].pageX)
button1 = false;
button2 = false;
if (window.innerWidth / 2 > touches[0].pageX) {
button2 = false;
button1 = false
}
}
function handleMove(evt) {
var touches = evt.changedTouches;
if (window.innerWidth / 2 < touches[0].pageX)
button1 = true;
button2 = false;
if (window.innerWidth / 2 > touches[0].pageX) {
button2 = true;
button1 = false
}
}
};
button1 и button2 отвечают за передвижение персонажа вправо и влево.Причём в начале игры всё работает нормально, но постепенно начинает падать fps. Подскажите как можно оптимизировать данный код? |
Цитата:
|
Цитата:
Ваша функция "mobileController" каждый раз, как вы её вызывает вешает на "body" по 3 обработчика. Если эта функция вызывается 60 раз в секунду, то за эту секунду на body будет висеть уже 60*3=180 обработчиков событий. Если после секунды ожиданий нажать куда-нибудь на страницу, то будут вызваны по очереди все 60 обработчиков для каждого из прослушиваемых событий. Да и вместо трех обработчиков можно использовать 1, который также можно "упростить" в 2 раза.
function handler(e) {
button2 = !(button1 = (window.innerWidth / 2) < e.changedTouches[0].pageX);
}
|
Nexus прав, слишком часто вызывается обработчик, сейчас попробую что-нибудь сделать
|
нужно убрать обработчики из функции, но при этом они перестанут работать хммммм....
|
Цитата:
|
Спасибо вам за помощь!
Код теперь выглядит так
var button1, button2;
var el = document.getElementsByTagName('body')[0];
el.addEventListener("touchstart", handler, false);
el.addEventListener("touchend", handleEnd, false);
el.addEventListener("touchmove", handler, false);
function handler(e) {
button2 = !(button1 = (window.innerWidth / 2) < e.changedTouches[0].pageX);
};
function handleEnd(e) {
var touches = e.changedTouches;
if (window.innerWidth / 2 < touches[0].pageX)
button1 = false;
button2 = false;
if (window.innerWidth / 2 > touches[0].pageX) {
button2 = false;
button1 = false
}
};
|
:-?
Цитата:
Цитата:
|
Retro_1477,
handleEnd зачем условие , если всегда Цитата:
|
Рони, мне нужно отслеживать момент когда палец отходит от экрана.
Если я убираю handleEnd то персонаж будет бегать постоянно при касание на левую или правую часть экрана |
| Часовой пояс GMT +3, время: 17:38. |