【问题标题】:Converting Pixels to Metres Advanced将像素转换为米高级
【发布时间】:2017-11-20 13:33:48
【问题描述】:
我无法在我的游戏中将像素转换为米
how many pixels is a meter in Box2D?
是我的问题的一个例子,但没有解决它。
这是因为这个解决方案虽然有效,但不会跨浏览器,也就是说,如果转换率是恒定的,比如 50 像素到一米,那么在分辨率为 400x800 的设备上,对象会显得很大,而在另一台分辨率为 4000x8000(夸张)的设备上,物体会很小。
我可以理解一些解决方案,但我发现这很难实现的主要原因是一个浏览器或手机可能是 16:9 的比例,而另一个可能是 14:7,这些不同的比例是踢球者,因为我的整个游戏都在屏幕上,因为它不是滚动游戏,它只是一个简单的物理游戏。
因此,我知道将世界缩小并在渲染时将其转换回来更容易,但是我提到的这些问题让我很困惑,如果有人有任何可行的解决方案,我正在徘徊.
【问题讨论】:
标签:
javascript
resolution
【解决方案1】:
因为你的
整个游戏都在屏幕上进行
我建议你以下:
决定您需要多少“米”的窗口宽度。假设你已经决定:
任何窗口宽度(W)总是N“米”
然后k = W/N 其中k 是一个缩放乘数,表示1“米”内的窗口宽度的一部分。
所以如果W = 400px 和N = 100m 你有k = 400px/100m = 4px/m。
当其他屏幕为W = 4000px 时,您拥有k = 40px/m。
这样,您可以通过将“米”中的尺寸乘以k 将“米”转换为像素,并且您的对象将始终缩放到屏幕尺寸。
在 JavaScript 中看起来像:
var N = 100; // window width in "meters"
var k = window.innerWidth / N; // px in 1m
// let's count something simple
var U = 10; // speed in meters per second
var t = 10; // time in seconds
var S = U * t; // distance in meters
var S_px = S * k; // distance in pixels (scaled to the window width)