Холст: указатель на основе области просмотра / содержит указатель мыши - PullRequest
1 голос
/ 13 марта 2011

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

  1. Невозможно захватить мышь внутри элемента <canvas>.
  2. Нет способа установитьположение указателя мыши.
  3. Невозможно перейти в полноэкранный режим с помощью <canvas>, и даже если после достижения края функциональность будет нарушена.

По уважительным причинам тоже.Представьте себе, какие возможные сценарии могут (и определенно будут) использоваться злоумышленниками.

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

Что вы принимаете или решаете?

Ответы [ 2 ]

1 голос
/ 13 марта 2011

Вы можете получить положение мыши внутри canvas.

function getCursorPosition(e) {
    var x;
    var y;
    if (e.pageX != undefined && e.pageY != undefined) {
    x = e.pageX;
    y = e.pageY;
    }
    else {
    x = e.clientX + document.body.scrollLeft +
            document.documentElement.scrollLeft;
    y = e.clientY + document.body.scrollTop +
            document.documentElement.scrollTop;
    }

    x -= gCanvasElement.offsetLeft;
    y -= gCanvasElement.offsetTop;

    var cell = new Cell(Math.floor(y/kPieceHeight),
                    Math.floor(x/kPieceWidth));
    return cell;
}

Из погружения в HTML5: назовем это ничьей (поверхность)

0 голосов
/ 14 марта 2011

Я не думаю, что есть хорошее решение для этого - по крайней мере, пока мы не получим блокировку мыши.Независимо от того, насколько изящно ваше решение, если вы создаете изворотливую игру, управляемую мышью, в какой-то момент пользователь будет дергаться за пределами области холста.Даже если они случайно не нажмут на ссылку, их погружение будет прервано, когда представление перестанет реагировать на их мышь.

Для игр с более медленной скоростью вы можете:

  • Использовать щелчоки перетащите, чтобы повернуть.Как только пользователь начинает перетаскивать внутри холста, вы используете дельту мыши с той точки, с которой он начал перетаскивать, чтобы определить, как далеко повернуть.Поскольку пользователь удерживает нажатой кнопку, он не будет случайно щелкать мышью.
  • Наведите курсор на края холста, чтобы повернуть, аналогично RTS.Это будет происходить медленнее, но, вероятно, будет наиболее интуитивным и легким для случайного обнаружения пользователем.
  • Используйте клавиатуру, чтобы выглядеть, как FPS-игры перед мышью (такие как Doom).

Стоит отметить, что в Firefox есть запрос открытой функции для блокировки мыши.Но, к сожалению, ни это, ни скрытие мыши, ни полноэкранный режим не являются частью спецификации WebGL.

Все эти функции поддерживаются Unity, так что это может быть путь к поиску, если вам действительно нужны элементы управления FPS.

...