A API Pointer Lock chegou recentemente ao Chrome Canary e ao Canal de Desenvolvedores. Aproveite! Espera, o quê? Ainda não conhece a API Pointer Lock? Em poucas palavras, a API Pointer Lock possibilita a criação de jogos de tiro em primeira pessoa adequados para a Web.
A implementação do Chrome permite que uma página da Web em tela cheia peça sua permissão para capturar o ponteiro do mouse, de modo que não seja possível movê-lo para fora da página. Isso permite que os desenvolvedores da Web criem jogos e aplicativos em 3D sem se preocupar com o movimento do cursor do mouse fora da página. Quando o ponteiro está bloqueado, os eventos de movimento do ponteiro têm os atributos movementX
e movementY
definidos, que informam quanto o mouse se moveu desde o último evento de movimento. Como de costume com as APIs de borda, esses atributos têm prefixos de fornecedor. Portanto, é necessário usar webkitMovementX
e similares.
Para ativar a API Pointer Lock nos builds atuais do Chrome, a maneira mais fácil é acessar about:flags
e ativar a flag "Ativar Pointer Lock". Também é possível ativar o recurso iniciando o Chrome usando a sinalização de linha de comando --enable-pointer-lock
.
Já existem algumas demonstrações interessantes aproveitando esse recurso. Confira a demonstração do WebGL do Quake 3 de Brandon Jones para saber como a API Pointer Lock torna os jogos WebGL FPS um cliente em potencial viável. Outra demonstração legal é o Webgl Street Viewer
Para começar a usar a API Pointer Lock, veja um pequeno trecho extraído do MDN:
<button onclick="document.body.webkitRequestFullScreen();">No, you lock it up!</button>
<script>
navigator.pointer = navigator.pointer || navigator.webkitPointer;
var onError = function() {
console.log("Mouse lock was not successful.");
};
document.addEventListener('webkitfullscreenchange', function(e) {
if (document.webkitIsFullScreen) {
navigator.pointer.lock(document.body, function() {
// Locked and ready to play.
}, onError);
}
}, false);
document.body.addEventListener('webkitpointerlocklost', function(e) {
console.log('Pointer lock lost!');
}, false);
document.body.addEventListener('mousemove', function(e) {
if (navigator.pointer.isLocked) { // got a locked pointer
var movementX = e.movementX || e.webkitMovementX;
var movementY = e.movementY || e.webkitMovementY;
}
}, false);
</script>
Você pode ver um exemplo mais completo em html5-demos.com. Para mais informações, dê uma olhada em:
- Postagem do blog de Vincent Scheib (editor de especificações)
- Documentação do MDN
- Especificação do W3C