Я создаю игру HTML5, и я пытаюсь навести курсор мыши на определенный элемент управления в конкретном событии, чтобы движение в определенном направлении всегда приводило к одинаковому результату. Это возможно?
Я создаю игру HTML5, и я пытаюсь навести курсор мыши на определенный элемент управления в конкретном событии, чтобы движение в определенном направлении всегда приводило к одинаковому результату. Это возможно?
Ответы:
Итак, я знаю, что это старая тема, но сначала скажу, что это невозможно. Самое близкое в настоящее время - это фиксация мыши в одной позиции и отслеживание изменений ее x и y. Эта концепция была принята - похоже - Chrome и Firefox. Это управляется так называемым замком мыши , и нажатие на побег сломает его. Из моего краткого прочтения я думаю, что идея состоит в том, что он фиксирует мышь в одном месте и сообщает о событиях движения, подобных событиям щелчка и перетаскивания.
Вот документация по выпуску:
FireFox: https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API
Chrome: http://www.chromium.org/developers/design-documents/mouse-lock
А вот и довольно изящная демонстрация: http://media.tojicode.com/q3bsp/
Вы не можете перемещать указатель мыши с помощью javascript.
Подумайте на секунду о последствиях, если сможете;)
Запустите его как CGI-скрипт с помощью простого HTTP-вызова, AJAX или чего угодно - с координатами, на которые вы хотите переместить мышь, например:
http://localhost:9876/cgi/mousemover?x=200&y=450
PS: Для любой проблемы есть сотни оправданий того, почему и как - это не может и не должно - быть выполнено ... Но в этой бесконечной вселенной это действительно просто вопрос определения - относительно того, будете ли ВЫ сделает это возможным.
Я бы предположил, что вы могли бы поместить курсор мыши в заданную область экрана, если бы вы не использовали настоящий (системный) курсор мыши.
Например, вы можете создать изображение, которое будет действовать вместо вашего курсора, обработать событие, которое при обнаружении mouseenter в вашей сцене, установить для стиля системного курсора значение 'none' ( sceneElement.style.cursor = 'none'
), затем вызвать скрытый элемент изображения, действующий в качестве курсора, чтобы быть в любом месте сцены на основе предопределенного перемещения оси / ограничивающей рамки.
Таким образом, независимо от того, как вы перемещаете реальный курсор, ваш метод перевода будет держать курсор изображения там, где он вам нужен.
редактировать: пример в jsFiddle с использованием представления изображения и принудительного движения мыши
Отличный вопрос. Этого действительно чего-то не хватает в API браузера Javascript. Я также работаю над игрой WebGL со своей командой, и нам нужна эта функция. Я открыл проблему в bugzilla Firefox, чтобы мы могли начать говорить о возможности наличия API, позволяющего блокировать мышь. Это будет полезно для всех разработчиков игр HTML5 / WebGL.
Если хотите, подойдите и оставьте комментарий со своим отзывом и проголосуйте за проблему:
https://bugzilla.mozilla.org/show_bug.cgi?id=630979
Спасибо!
Вы можете определить положение указателя мыши, а затем переместить веб-страницу (с относительным положением тела), чтобы они наводили курсор на то, что вы хотите, чтобы они щелкнули.
Например, вы можете вставить этот код на текущую страницу в консоли браузера (и затем обновить)
var upvote_position = $('#answer-12878316').position();
$('body').mousemove(function (event) {
$(this).css({
position: 'relative',
left: (event.pageX - upvote_position.left - 22) + 'px',
top: (event.pageY - upvote_position.top - 35) + 'px'
});
});
document.getElementByID('thingtoclick').click();
Вы не можете двигать мышью, но можете заблокировать ее. Примечание: вы должны вызывать requestPointerLock в событии щелчка.
Маленький пример:
var canvas = document.getElementById('mycanvas');
canvas.requestPointerLock = canvas.requestPointerLock || canvas.mozRequestPointerLock || canvas.webkitRequestPointerLock;
canvas.requestPointerLock();
Документация и пример полного кода:
https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API
Вы не можете перемещать указатель мыши с помощью javascript, и, следовательно, по очевидным причинам безопасности. Лучший способ добиться этого эффекта - поместить элемент управления под указатель мыши.
Нельзя ли это сделать просто путем получения фактического положения указателя мыши, а затем вычисления и компенсации действий мыши спрайта / сцены на основе этой компенсации?
Например, вам нужно, чтобы указатель мыши находился внизу в центре, но он располагался вверху слева; скрыть курсор, использовать смещенное изображение курсора. Сдвиньте движение курсора и сопоставьте ввод мыши, чтобы он соответствовал нажатию спрайта перемещенного курсора (или «элемента управления»). При / при достижении границ пересчитать. Если / когда курсор действительно попадает в точку, в которой вы хотите, удалите компенсацию.
Заявление об отказе от ответственности, а не разработчик игр.
Интересный. Это невозможно напрямую по причинам, названным ранее (клики по спаму и внедрение вредоносного ПО), но рассмотрите этот взлом, который создает такое же впечатление:
Допустим, у вас есть div, вы можете использовать это свойство css, чтобы скрыть настоящий курсор:
.your_div {
cursor: none
}
Просто создайте изображение, похожее на курсор, и поместите его на свою веб-страницу с position = 'absolute'.
Это просто. Узнайте в Интернете, как получить реальное местоположение мыши (координаты X и Y).
По мере того, как фактический курсор перемещается, перемещайте псевдокурсор на ту же разницу X и Y. Точно так же вы всегда можете сгенерировать событие щелчка в любом месте своей веб-страницы с помощью магии JavaScript (просто поищите в Интернете инструкции).
Теперь на этом этапе вы можете управлять псевдо-курсором так, как хотите, и у вашего пользователя будет впечатление, что настоящий курсор движется.
====
Справедливое предупреждение: не делайте этого. Никто не хочет, чтобы их курсор или компьютер управлялись таким образом, если только у вас нет какого-либо конкретного варианта использования или если вы решительно настроены убежать от своих пользователей.