L'idée: strong> Je crée un script WebGL simple (utilisant les merveilleux trois.Js de MRDOOB) qui permet à l'utilisateur de contrôler une caméra dans un monde d'objets. La caméra est censée simuler des caméras de tir à la première personne traditionnelles (forteresse de l'équipe de référence 2, par exemple). C'est-à-dire que la caméra ne se déplace que lorsque la souris se déplace. p>
Le problème: strong> en JavaScript, le seul moyen de détecter le mouvement de la souris est si le curseur lui-même se déplace. En comparaison, les jeux FPS ne montrent pas le curseur - ils ne font que baser le mouvement de la caméra de la façon dont la souris elle-même se déplace. Donc, vous pouvez déplacer votre souris partout sur le Mousepad dans n'importe quelle direction et cela fonctionne toujours. p>
sur un navigateur cependant, puisque le mouvement de la caméra est basé sur le curseur, vous ne pouvez pas bouger mais jusqu'à présent. Lorsque le curseur frappe le bord de l'écran, l'utilisateur est incapable de rechercher plus loin dans cette direction (par exemple, vous déplacez votre souris sur le bord gauche de l'écran, vous ne pouvez plus regarder à gauche). P>
La solution: forte> J'ai pensé à deux solutions, mais dont aucun desquels je sais, je sais comment mettre en œuvre. Soit p>
Après que la souris soit déplacée, le JavaScript la réinitialise au centre de l'écran. De cette façon, après chaque mouvement de la souris, le joueur est libre de bouger à nouveau dans n'importe quelle direction. Le problème avec c'est que, sur la base de la recherche que j'ai faite, JavaScript est incapable de contrôler la position de la souris de l'utilisateur (naturellement, car ce serait une nuisance incomparable sur des sites malins). P> Li>
ou, la souris "enveloppe" autour de l'écran. Signification, lorsque l'utilisateur atteint un bord de l'écran, la souris continuerait simplement de l'autre côté de l'écran. (Voir: http://www.digicowsoftware.com/detail?_app=wraparound ) cependant, il semble que Ce n'est pas non plus une capacité inhérente à JavaScript, mais n'est que quelque chose qu'un programme tiers pourrait résoudre. P> li>
ol>
Alors, le problème a-t-il un sens? Si tel est le cas, est-ce que je peux implémenter les solutions ci-dessus ou y a-t-il un autre? P>
4 Réponses :
Vous avez raison de tout cela. Tech Web basé sur les normes ne va pas vous donner la capture de souris comme vous le souhaitez. P>
Cela dit: vous pourriez être capable d'embarquer (ou de trouver) un SWF spécial pouvant collecter des données de mouvement de la souris et transmettre à JavaScript. Il ne contrainte pas le mouvement du curseur, bien que vous puissiez utiliser CSS pour dissimuler le curseur pendant que la capture de la souris est active. Mais cela pourrait être capable d'exercer. Continuez à tirer des événements «Déplacer la souris à gauche», même lorsque le curseur a atteint le bord gauche de l'écran. P>
Un tel SWF ne parviendra probablement pas à capturer le mouvement lorsque le curseur est en dehors de la fenêtre I.e. sur le navigateur chrome. P>
Urgh. Bien que cela puisse fonctionner, j'ai l'impression d'avoir une superposition SWF Un script Webgl serait lent et difficile à mettre en œuvre. J'apprécie cependant les commentaires.
Le SWF ne serait pas nécessairement une superposition. Semblable à la manière dont il est possible d'intégrer un SWF invisible (ou 1x1px) à par exemple. Jouez aux ressources audio, ce SWF pourrait être en mesure de fournir des données de mouvement de la souris simplement en étant sur la page - que la souris soit sur le SWF ou non. Vous auriez besoin de demander des gens flashs à ce sujet, cependant.
Étant donné qu'il n'est apparemment pas possible de le faire comme tel dans HTML5 / JavaScript, qu'en est-il de cette variante: Traitez la souris position em> (pas de mouvement de la souris) comme représentant le taux de retournement. P >
Donc, si la souris est plus qu'un certain seuil à gauche du centre, la caméra tourne à gauche; Plus la souris a quitté la souris, plus la caméra tourne plus vite. Pour arrêter de tourner, le joueur recule la souris vers le centre. P>
Pour moi, c'est un UI agaçant, au moins initialement, mais peut-être que le joueur s'y habituerait. Comme nous n'avons pas de solutions parfaites, cela vaut peut-être la peine d'être essayé. Vous pouvez atténuer le problème en permettant aux touches fléchées de fonctionner comme ils le font dans de nombreux FPS, tournent la caméra quand elles sont enfoncées. P>
J'apprécie la réponse, même si je pense que vous avez raison. Que l'interface utilisateur pourrait devenir frustrante. Je pourrais aller avec les flèches.
La communauté mondiale travaille actuellement sur un projet de spécification pour résoudre ce problème. Ce que vous sentez s'appelle "verrouillage de la souris". J'ai un peu travaillé à la première phase de cette norme pour vous aider à établir ce qui est nécessaire. Veuillez voter pour ces problèmes et vous abonner aux listes de messagerie indiquées afin que nous ayons tous d'obtenir ce problème corrigé dès que possible. P>
Cependant, il y a encore une façon de pouvoir atteindre votre objectif (qui est l'autre que j'ai trouvé): un plugin natif qui prend le contrôle de la souris. P>
(Je fais un jeu aussi qui est un FPS mais ne sera actuellement pas publié en raison de cette limitation) p>
N'a pas réalisé qu'il y a un terme réel pour cela. Merci pour l'info! Je serai sûr de lancer.
Pour quiconque toujours intéressé à atteindre cela, il est maintenant un peu disponible.
Utilisation: p> Voir exemple http://www.html5rocks.com/fr/Tutorials/pointerlock/intro/ p> p>
Oui! API est également décrit ici: chromeium.org/developers/design-documents/mouse- LOCK
Question interessante. Ne sous-estimez jamais la visualisation de F11, en plein écran. :-)
@zourtney plein écran ne résout pas le problème à cause de: 1) la souris est plafonnée aux limites de l'écran; 2) Avec un réglage multimonciteur, la souris peut sortir de la zone du navigateur. Vérifiez ma réponse là-bas.
@Chiguireitor, oui, je réalise que l'écran entier seul est insuffisant pour un FPS approprié pour les raisons de votre mention. Je n'ai pas réalisé qu'il y avait un projet de speced pour cela. Merci de m'appeler quelque chose aujourd'hui. Votre réponse a mon upvote :-) Je pense que nous sommes tous d'accord sur ce type d'exigence que vous obtiendrez plus i> Populaire comme Web Tech devient plus répandu