如何根据屏幕大小正确调整画布大小?Javascript(p5.js)

如何根据屏幕大小正确调整画布大小?Javascript(p5.js),javascript,canvas,resize,p5.js,mouse-coordinates,Javascript,Canvas,Resize,P5.js,Mouse Coordinates,因此,正如问题所说,我需要根据屏幕大小调整画布的大小。然而,事实并非如此。我还需要按比例更新鼠标坐标。似乎我犯了一个致命的错误,从一开始就没有考虑屏幕大小,因为这是我第一个真正的游戏。我根据我的1080p屏幕制作了这个游戏。定位东西和检查鼠标坐标等都基于1920x1080画布。请帮忙 Github链接: 主游戏,可以运行,但大小取决于您的屏幕: 所有文件(如果您想通过下载查看,则仅为15MB): sketch.js(与此相关的主要文件): 主要是在sketch.js中,第260-263行中的函数

因此,正如问题所说,我需要根据屏幕大小调整画布的大小。然而,事实并非如此。我还需要按比例更新鼠标坐标。似乎我犯了一个致命的错误,从一开始就没有考虑屏幕大小,因为这是我第一个真正的游戏。我根据我的1080p屏幕制作了这个游戏。定位东西和检查鼠标坐标等都基于1920x1080画布。请帮忙

Github链接:

  • 主游戏,可以运行,但大小取决于您的屏幕:
  • 所有文件(如果您想通过下载查看,则仅为15MB):
  • sketch.js(与此相关的主要文件):
  • 主要是在sketch.js中,第260-263行中的
    函数设置()中的一些createCanvas行,未注释的是
    createCanvas(19201080)因为这是我的工作。在行302-314上有一组camera.zoom行,未注释的是
    camera.zoom=1因为在我的屏幕上,主菜单不需要缩放

    第352行之后是一些关于知道玩家点击的位置的代码,问题是这样的。我确实知道如何使用
    windowWidth
    &
    windowHeight
    使画布的内容在所有屏幕上看起来都正确调整大小,但问题的原因是鼠标坐标不正确。如果有人能帮忙,那就太好了


    如果你这边的游戏有问题,这里有一个关于游戏菜单工作原理的第二个视频,尽管它非常简单:

    我自己解决了。对于一些值,如测试if
    mouseX>=720
    时,我必须将其编辑为
    mouseX>=785*windowWidth/1920

    对于我使用的一个翻译,
    translate(95525)
    ,我必须再修改一点,这是一个正确工作的翻译(displayWidth/2-865*(windowWidth)/1920,displayHeight/2-15*(windowHeight)/1080)

    至于调整屏幕大小,这很好:

    function windowResized() {
      resizeCanvas(windowWidth, windowHeight);
      if(windowHeight > windowWidth){
        factor = windowHeight;
        factdiv = 1080;
      }else{
        factor = windowWidth;
        factdiv = 1920;
      }
    }
    
    为了找到一个像样的解决办法,我不得不把这些东西弄得乱七八糟

  • 画布尺寸,即1920、1080
  • 窗宽、窗高
  • 还有显示宽度、显示高度

  • 我还更新了存储库中的相同内容,以便您可以从这里看到最终结果:

    我自己找到了答案。对于一些值,如测试if
    mouseX>=720
    时,我必须将其编辑为
    mouseX>=785*windowWidth/1920

    对于我使用的一个翻译,
    translate(95525)
    ,我必须再修改一点,这是一个正确工作的翻译(displayWidth/2-865*(windowWidth)/1920,displayHeight/2-15*(windowHeight)/1080)

    至于调整屏幕大小,这很好:

    function windowResized() {
      resizeCanvas(windowWidth, windowHeight);
      if(windowHeight > windowWidth){
        factor = windowHeight;
        factdiv = 1080;
      }else{
        factor = windowWidth;
        factdiv = 1920;
      }
    }
    
    为了找到一个像样的解决办法,我不得不把这些东西弄得乱七八糟

  • 画布尺寸,即1920、1080
  • 窗宽、窗高
  • 还有显示宽度、显示高度

  • 我还更新了存储库中的相同内容,以便您可以从这里看到最终结果:

    恐怕没有简单的解决方法。。。您必须重构您的代码,以便在需要时按比例进行更新resizing@HelderSepulveda这就是它看起来的样子。。。但我很确定,如果我喜欢,也许用鼠标坐标乘以某个值,它会正常工作,但我想不出类似的东西。如果你能说出那样的话,那就太有帮助了。比如乘以windowWidth/1920或者类似的东西,但我就是想不出来鼠标坐标只是冰山一角,到处都是硬编码的值:@HelderSepulveda实际上很多值会保持原样,所以如果我能处理鼠标坐标就足够了。我也测试了主游戏,除了一些文本对齐之外,它运行得非常好,可能会以类似于鼠标坐标的方式得到修复。发布你的答案,这样其他人可能会发现它。恐怕没有简单的修复方法。。。您必须重构您的代码,以便在需要时按比例进行更新resizing@HelderSepulveda这就是它看起来的样子。。。但我很确定,如果我喜欢,也许用鼠标坐标乘以某个值,它会正常工作,但我想不出类似的东西。如果你能说出那样的话,那就太有帮助了。比如乘以windowWidth/1920或者类似的东西,但我就是想不出来鼠标坐标只是冰山一角,到处都是硬编码的值:@HelderSepulveda实际上很多值会保持原样,所以如果我能处理鼠标坐标就足够了。我也测试了主游戏,除了一些文本对齐之外,它工作得非常好,这可能会以类似于鼠标坐标的方式得到修复。发布你的答案,以便其他人可以找到它