如何在iPhone 4上实现全屏画布并保持全分辨率?

4
我正在尝试创建一个HTML5游戏,希望能在现代桌面浏览器以及尽可能多的智能手机上运行。目前,这意味着iPhone 3/4和一些Android手机......

这个游戏基本上是一个画布,应该占据整个屏幕,我手动调整大小(处理onResize事件),如下所示:(这是我通过试错发现的最佳方法,如果您有任何建议,我很乐意听取!)

  • 对于桌面浏览器:canvas.width/height = window.innerWidth / Height
  • 对于Android:同样的方式,但我将(outerHeight - innerHeight)添加到画布高度,并向下滚动,以补偿顶部栏。
  • 对于iPhone 3:与Android相同,但我加了一个硬编码的60px。

在所有情况下,我都有这些meta标签:

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, target-densitydpi=device-dpi" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />

现在我的大问题是iPhone 4...我上面提到的iPhone 3设置完美运行,但显示的分辨率很低,看起来很糟糕。我还没有成功地让它以全视网膜分辨率显示,而且要做到不滚动并(这很关键)响应手机的旋转。

我最接近的方法是设置

<meta name="viewport" content="width=640, initial-scale=0.5 (etc)" />

将画布设置为窗口的外部宽度和高度,而不是内部的。这看起来一开始很漂亮;然而,一旦我旋转手机,它就会变得非常混乱,如果我将其旋转回纵向,则更加混乱。
令人惊讶的是,刷新并不能解决这个问题,我需要在 meta viewport 中将 "initial-scale" 更改为 1,刷新,然后再将其更改为 0.5 并刷新。
有没有办法实现我想要的效果呢?
非常感谢! Daniel

你好,你能找到任何解决方案吗? - Mohammad Kermani
这篇回答对需要帮助的人很有用:https://dev59.com/AGgu5IYBdhLWcg3wFDRr#15397707 - Mohammad Kermani
1个回答

5
您可以尝试保持initial-scale=1,然后将canvas.width和canvas.height设置为您确定的适当尺寸的两倍,并使用CSS设置CSS宽度和CSS高度为正确的大小。这样可以获得更高分辨率的画布。canvas.height和canvas.width属性设置画布中实际像素的数量,而CSS高度和宽度仅将画布拉伸(或在此情况下压缩)到特定大小。

太棒了!我怎么会错过那个呢? 然而... 我该如何区分 iPhone 3 和 4?用户代理给我的是 iOS 版本,这并不一定与屏幕分辨率相关... 我如何知道是否要将画布的分辨率设置为两倍? - Daniel Magliola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接