Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 画布:基于指针的视口/包含鼠标指针_Javascript_Html_Canvas_3d_Viewport - Fatal编程技术网

Javascript 画布:基于指针的视口/包含鼠标指针

Javascript 画布:基于指针的视口/包含鼠标指针,javascript,html,canvas,3d,viewport,Javascript,Html,Canvas,3d,Viewport,将视口基于鼠标指针的位置并能够自由移动,这似乎不是一个好方法。基本上,就像市场上的其他第一人称游戏一样 没有办法抓住老鼠 在元素内 没有办法设定位置 鼠标指针的位置 不可能全屏显示 使用,即使达到边缘,功能也会中断 也有很好的理由。想象一下恶意的人可能(而且肯定会)使用什么样的场景 也许现在考虑一些几乎只在3D环境中有用的东西还为时过早,一些还没有规范的东西 您的想法或解决方案是什么?您可以在画布中获得鼠标位置 function getCursorPosition(e) { var x;

视口基于鼠标指针的位置并能够自由移动,这似乎不是一个好方法。基本上,就像市场上的其他第一人称游戏一样

  • 没有办法抓住老鼠 在
    元素内
  • 没有办法设定位置 鼠标指针的位置
  • 不可能全屏显示 使用
    ,即使达到边缘,功能也会中断
  • 也有很好的理由。想象一下恶意的人可能(而且肯定会)使用什么样的场景

    也许现在考虑一些几乎只在3D环境中有用的东西还为时过早,一些还没有规范的东西

    您的想法或解决方案是什么?

    您可以在
    画布中获得鼠标位置

    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;
    }
    

    您可以在
    画布中获取鼠标位置

    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;
    }
    

    我认为没有一个好的解决方案——至少在我们实现鼠标锁定之前是这样。无论您的解决方案多么优雅,如果您制作一个twitchy mouselook驱动的游戏,用户将在某个时候在画布区域外抽搐。即使他们没有意外点击链接,当视图停止响应鼠标时,他们的沉浸感也会被打破

    对于节奏较慢的游戏,您可以:

    • 使用单击并拖动来旋转。一旦用户开始在画布内拖动,您就可以使用鼠标从开始拖动的点开始的增量来确定要转多远。因为用户按下了按钮,所以他们不会意外地点击东西
    • 将光标悬停在画布边缘附近以旋转,类似于RTS。这将变得更慢,但可能是最直观的,也是用户最容易意外发现的
    • 使用键盘查看,就像鼠标前的FPS游戏(如Doom)
    值得注意的是,Firefox中有一个用于鼠标锁定的功能。但是,不幸的是,这、鼠标隐藏或全屏都不是WebGL规范的一部分


    所有这些特性都受Unity支持,因此如果您真的需要FPS控件,那么这可能是一条值得关注的途径

    我认为没有一个好的解决方案——至少在我们实现鼠标锁定之前是这样。无论您的解决方案多么优雅,如果您制作一个twitchy mouselook驱动的游戏,用户将在某个时候在画布区域外抽搐。即使他们没有意外点击链接,当视图停止响应鼠标时,他们的沉浸感也会被打破

    对于节奏较慢的游戏,您可以:

    • 使用单击并拖动来旋转。一旦用户开始在画布内拖动,您就可以使用鼠标从开始拖动的点开始的增量来确定要转多远。因为用户按下了按钮,所以他们不会意外地点击东西
    • 将光标悬停在画布边缘附近以旋转,类似于RTS。这将变得更慢,但可能是最直观的,也是用户最容易意外发现的
    • 使用键盘查看,就像鼠标前的FPS游戏(如Doom)
    值得注意的是,Firefox中有一个用于鼠标锁定的功能。但是,不幸的是,这、鼠标隐藏或全屏都不是WebGL规范的一部分


    所有这些特性都受Unity支持,因此如果您真的需要FPS控件,那么这可能是一条值得关注的途径

    是的,很明显。但这不是我要找的。我正在探索这样一种可能性,即不断地、无限期地向任一方向滚动视口。但是,一旦你将鼠标移到画布外,你就失去了这一能力。@abloodywar你不是在移动画布上绘制的内容,而不是滚动浏览器视口吗?是的,很明显。但这不是我要找的。我正在探索这样一种可能性,即不断地、无限期地向任一方向滚动视口。但是,一旦你将鼠标移到画布之外,你就失去了这一能力。@abloodywar你不是在移动画布上绘制的内容,而不是滚动浏览器视口吗?